upload android base code part7
This commit is contained in:
parent
4e516ec6ed
commit
841ae54672
25229 changed files with 1709508 additions and 0 deletions
|
@ -0,0 +1,95 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="SmsSampleProject" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
|
||||
<component name="FacetManager">
|
||||
<facet type="android-gradle" name="Android-Gradle">
|
||||
<configuration>
|
||||
<option name="GRADLE_PROJECT_PATH" value=":app" />
|
||||
</configuration>
|
||||
</facet>
|
||||
<facet type="android" name="Android">
|
||||
<configuration>
|
||||
<option name="SELECTED_BUILD_VARIANT" value="debug" />
|
||||
<option name="SELECTED_TEST_ARTIFACT" value="_android_test_" />
|
||||
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
|
||||
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
|
||||
<option name="SOURCE_GEN_TASK_NAME" value="generateDebugSources" />
|
||||
<option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugAndroidTest" />
|
||||
<option name="COMPILE_JAVA_TEST_TASK_NAME" value="compileDebugAndroidTestSources" />
|
||||
<option name="TEST_SOURCE_GEN_TASK_NAME" value="generateDebugAndroidTestSources" />
|
||||
<option name="ALLOW_USER_CONFIGURATION" value="false" />
|
||||
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
|
||||
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
|
||||
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
|
||||
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
|
||||
</configuration>
|
||||
</facet>
|
||||
</component>
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="false">
|
||||
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
|
||||
<output-test url="file://$MODULE_DIR$/build/intermediates/classes/androidTest/debug" />
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/generated/debug" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/generated/androidTest/debug" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/coverage-instrumented-classes" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/22.2.0/jars" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/22.2.0/jars" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jacoco" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaResources" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/libs" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/ndk" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="Android API 22 Platform" jdkType="Android SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" exported="" name="support-annotations-22.2.0" level="project" />
|
||||
<orderEntry type="library" exported="" name="support-v4-22.2.0" level="project" />
|
||||
<orderEntry type="library" exported="" name="appcompat-v7-22.2.0" level="project" />
|
||||
</component>
|
||||
</module>
|
|
@ -0,0 +1,25 @@
|
|||
apply plugin: 'com.android.application'
|
||||
|
||||
android {
|
||||
compileSdkVersion 22
|
||||
buildToolsVersion "23.0.0 rc2"
|
||||
|
||||
defaultConfig {
|
||||
applicationId "android.example.com.smssample"
|
||||
minSdkVersion 15
|
||||
targetSdkVersion 22
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
}
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile fileTree(dir: 'libs', include: ['*.jar'])
|
||||
compile 'com.android.support:appcompat-v7:22.2.0'
|
||||
}
|
17
android/development/samples/devbytes/telephony/SmsSampleProject/app/proguard-rules.pro
vendored
Normal file
17
android/development/samples/devbytes/telephony/SmsSampleProject/app/proguard-rules.pro
vendored
Normal file
|
@ -0,0 +1,17 @@
|
|||
# Add project specific ProGuard rules here.
|
||||
# By default, the flags in this file are appended to flags specified
|
||||
# in /usr/local/google/home/omakoto/Android/Sdk/tools/proguard/proguard-android.txt
|
||||
# You can edit the include path and order by changing the proguardFiles
|
||||
# directive in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# Add any project specific keep options here:
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
|
@ -0,0 +1,138 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.example.android.smssample"
|
||||
android:versionCode="1"
|
||||
android:versionName="1.0" >
|
||||
|
||||
<uses-sdk
|
||||
android:minSdkVersion="10"
|
||||
android:targetSdkVersion="19" />
|
||||
|
||||
<uses-permission android:name="android.permission.WRITE_SMS" />
|
||||
<uses-permission android:name="android.permission.READ_SMS" />
|
||||
<uses-permission android:name="android.permission.SEND_SMS" />
|
||||
<uses-permission android:name="android.permission.RECEIVE_SMS" />
|
||||
<uses-permission android:name="android.permission.RECEIVE_MMS" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:icon="@drawable/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/AppTheme" >
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:label="@string/app_name"
|
||||
android:windowSoftInputMode="stateHidden">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEND" />
|
||||
<action android:name="android.intent.action.SENDTO" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<data android:scheme="sms" />
|
||||
<data android:scheme="smsto" />
|
||||
<data android:scheme="mms" />
|
||||
<data android:scheme="mmsto" />
|
||||
</intent-filter>
|
||||
|
||||
</activity>
|
||||
|
||||
<!-- BroadcastReceiver that listens for incoming SMS messages -->
|
||||
<!-- Note the use of android:enabled that is linked to a bool. This will mean this receiver
|
||||
is enabled on KitKat devices and above -->
|
||||
<receiver android:name=".receiver.SmsReceiver"
|
||||
android:enabled="@bool/hasKitKat"
|
||||
android:permission="android.permission.BROADCAST_SMS">
|
||||
|
||||
<!-- KitKat+ SMS received action -->
|
||||
<intent-filter>
|
||||
<action android:name="android.provider.Telephony.SMS_DELIVER" />
|
||||
</intent-filter>
|
||||
|
||||
</receiver>
|
||||
|
||||
<!-- BroadcastReceiver that listens for incoming SMS messages -->
|
||||
<!-- Note the use of android:enabled that is linked to a bool. This will mean this receiver
|
||||
is enabled on preKitKat devices -->
|
||||
<receiver android:name=".receiver.SmsReceiverLegacy"
|
||||
android:enabled="@bool/preKitKat">
|
||||
|
||||
<!-- Pre-KitKat SMS received action -->
|
||||
<intent-filter>
|
||||
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
|
||||
</intent-filter>
|
||||
|
||||
</receiver>
|
||||
|
||||
<!-- BroadcastReceiver that listens for incoming MMS messages -->
|
||||
<!-- Note the use of android:enabled that is linked to a bool. This will mean this receiver
|
||||
is enabled on KitKat devices and above -->
|
||||
<receiver android:name=".receiver.MmsReceiver"
|
||||
android:enabled="@bool/hasKitKat"
|
||||
android:permission="android.permission.BROADCAST_WAP_PUSH">
|
||||
|
||||
<!-- KitKat+ MMS received action -->
|
||||
<intent-filter>
|
||||
<action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
|
||||
<data android:mimeType="application/vnd.wap.mms-message" />
|
||||
</intent-filter>
|
||||
|
||||
</receiver>
|
||||
|
||||
<!-- BroadcastReceiver that listens for incoming MMS messages -->
|
||||
<!-- Note the use of android:enabled that is linked to a bool. This will mean this receiver
|
||||
is enabled on preKitKat devices -->
|
||||
<receiver android:name=".receiver.MmsReceiverLegacy"
|
||||
android:enabled="@bool/preKitKat">
|
||||
|
||||
<!-- Pre-KitKat MMS received action -->
|
||||
<intent-filter>
|
||||
<action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />
|
||||
<data android:mimeType="application/vnd.wap.mms-message" />
|
||||
</intent-filter>
|
||||
|
||||
</receiver>
|
||||
|
||||
<!-- Service that delivers SMS messages received from the phone "quick response" -->
|
||||
<service android:name=".service.RespondService"
|
||||
android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE"
|
||||
android:exported="true" >
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.RESPOND_VIA_MESSAGE" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:scheme="sms" />
|
||||
<data android:scheme="smsto" />
|
||||
<data android:scheme="mms" />
|
||||
<data android:scheme="mmsto" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<!-- A service used internally to process incoming SMS/MMS -->
|
||||
<service android:name=".service.MessagingService"
|
||||
android:exported="false" />
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
|
@ -0,0 +1,213 @@
|
|||
/*
|
||||
* Copyright (C) 2013 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.example.android.smssample;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Telephony.Sms.Inbox;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.support.v4.app.LoaderManager.LoaderCallbacks;
|
||||
import android.support.v4.content.CursorLoader;
|
||||
import android.support.v4.content.Loader;
|
||||
import android.support.v4.widget.SimpleCursorAdapter;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.text.TextUtils;
|
||||
import android.view.Menu;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ListView;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.Toast;
|
||||
|
||||
/**
|
||||
* The main Activity that provides a sample of a few things:
|
||||
* -detecting if this app is the default SMS app and then showing/hiding UI and enabling/disabling
|
||||
* functionality. the UI that is shown has a button to prompt the user to set this app as the
|
||||
* default.
|
||||
* -a simple query to the SMS content provider to show a list of SMS messages in the inbox. even
|
||||
* though the query uses KitKat APIs this query should still work on earlier versions of Android
|
||||
* as the contract class and ContentProvider were still around (with essentially the same
|
||||
* structure) but were private.
|
||||
* -being triggered from another application when creating a new SMS. a good example is creating
|
||||
* a new SMS from the system People application. although nothing is done with the incoming
|
||||
* Intent in this case (just a Toast is displayed)
|
||||
*
|
||||
* Obviously this is far from a full implementation and should just be used as a sample of how
|
||||
* an app could be set up to correctly integrate with the new Android 4.4 KitKat APIs while
|
||||
* running normally on earlier Android versions.
|
||||
*/
|
||||
public class MainActivity extends FragmentActivity implements LoaderCallbacks<Cursor> {
|
||||
private RelativeLayout mSetDefaultSmsLayout;
|
||||
private Button mSendSmsButton;
|
||||
private EditText mSendSmsEditText;
|
||||
private SimpleCursorAdapter mAdapter;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_main);
|
||||
|
||||
// Find some views
|
||||
mSetDefaultSmsLayout = (RelativeLayout) findViewById(R.id.set_default_sms_layout);
|
||||
mSendSmsEditText = (EditText) findViewById(R.id.send_sms_edittext);
|
||||
ListView listView = (ListView) findViewById(android.R.id.list);
|
||||
listView.setEmptyView(findViewById(android.R.id.empty));
|
||||
mSendSmsButton = (Button) findViewById(R.id.send_sms_button);
|
||||
mSendSmsButton.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
sendSms(mSendSmsEditText.getText().toString());
|
||||
}
|
||||
});
|
||||
|
||||
// Create adapter and set it to our ListView
|
||||
final String[] fromFields = new String[] {
|
||||
SmsQuery.PROJECTION[SmsQuery.ADDRESS], SmsQuery.PROJECTION[SmsQuery.BODY] };
|
||||
final int[] toViews = new int[] { android.R.id.text1, android.R.id.text2 };
|
||||
mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, null,
|
||||
fromFields, toViews, 0);
|
||||
listView.setAdapter(mAdapter);
|
||||
|
||||
// Placeholder to process incoming SEND/SENDTO intents
|
||||
String intentAction = getIntent() == null ? null : getIntent().getAction();
|
||||
if (!TextUtils.isEmpty(intentAction) && (Intent.ACTION_SENDTO.equals(intentAction)
|
||||
|| Intent.ACTION_SEND.equals(intentAction))) {
|
||||
// TODO: Handle incoming SEND and SENDTO intents by pre-populating UI components
|
||||
Toast.makeText(this, "Handle SEND and SENDTO intents: " + getIntent().getDataString(),
|
||||
Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
// Simple query to show the most recent SMS messages in the inbox
|
||||
getSupportLoaderManager().initLoader(SmsQuery.TOKEN, null, this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Dummy sendSms method, would need the "to" address to actually send a message :)
|
||||
*/
|
||||
private void sendSms(String smsText) {
|
||||
if (!TextUtils.isEmpty(smsText)) {
|
||||
if (Utils.isDefaultSmsApp(this)) {
|
||||
// TODO: Use SmsManager to send SMS and then record the message in the system SMS
|
||||
// ContentProvider
|
||||
Toast.makeText(this, "Sending text message: " + smsText, Toast.LENGTH_SHORT).show();
|
||||
} else {
|
||||
// TODO: Notify the user the app is not default and provide a way to trigger
|
||||
// Utils.setDefaultSmsApp() so they can set it.
|
||||
Toast.makeText(this, "Not default", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
|
||||
// Only do these checks/changes on KitKat+, the "mSetDefaultSmsLayout" has its visibility
|
||||
// set to "gone" in the xml layout so it won't show at all on earlier Android versions.
|
||||
if (Utils.hasKitKat()) {
|
||||
if (Utils.isDefaultSmsApp(this)) {
|
||||
// This app is the default, remove the "make this app the default" layout and
|
||||
// enable message sending components.
|
||||
mSetDefaultSmsLayout.setVisibility(View.GONE);
|
||||
mSendSmsEditText.setHint(R.string.sms_send_new_hint);
|
||||
mSendSmsEditText.setEnabled(true);
|
||||
mSendSmsButton.setEnabled(true);
|
||||
} else {
|
||||
// Not the default, show the "make this app the default" layout and disable
|
||||
// message sending components.
|
||||
mSetDefaultSmsLayout.setVisibility(View.VISIBLE);
|
||||
mSendSmsEditText.setText("");
|
||||
mSendSmsEditText.setHint(R.string.sms_send_disabled);
|
||||
mSendSmsEditText.setEnabled(false);
|
||||
mSendSmsButton.setEnabled(false);
|
||||
|
||||
Button button = (Button) findViewById(R.id.set_default_sms_button);
|
||||
button.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
Utils.setDefaultSmsApp(MainActivity.this);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
String phoneNumberToast = "Unable to obtain phone number (not default SMS app?)";
|
||||
final TelephonyManager telephony =
|
||||
(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
|
||||
try {
|
||||
phoneNumberToast = "Phone number: " + telephony.getLine1Number();
|
||||
} catch (SecurityException e) {
|
||||
}
|
||||
Toast.makeText(this, phoneNumberToast, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
// Inflate the menu; this adds items to the action bar if it is present.
|
||||
getMenuInflater().inflate(R.menu.main, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
|
||||
if (i == SmsQuery.TOKEN) {
|
||||
// This will fetch all SMS messages in the inbox, ordered by date desc
|
||||
return new CursorLoader(this, SmsQuery.CONTENT_URI, SmsQuery.PROJECTION, null, null,
|
||||
SmsQuery.SORT_ORDER);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
|
||||
if (cursorLoader.getId() == SmsQuery.TOKEN && cursor != null) {
|
||||
// Standard swap cursor in when load is done
|
||||
mAdapter.swapCursor(cursor);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoaderReset(Loader<Cursor> cursorLoader) {
|
||||
// Standard swap cursor to null when loader is reset
|
||||
mAdapter.swapCursor(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* A basic SmsQuery on android.provider.Telephony.Sms.Inbox
|
||||
*/
|
||||
private interface SmsQuery {
|
||||
int TOKEN = 1;
|
||||
|
||||
static final Uri CONTENT_URI = Inbox.CONTENT_URI;
|
||||
|
||||
static final String[] PROJECTION = {
|
||||
Inbox._ID,
|
||||
Inbox.ADDRESS,
|
||||
Inbox.BODY,
|
||||
};
|
||||
|
||||
static final String SORT_ORDER = Inbox.DEFAULT_SORT_ORDER;
|
||||
|
||||
int ID = 0;
|
||||
int ADDRESS = 1;
|
||||
int BODY = 2;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
/*
|
||||
* Copyright (C) 2013 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.example.android.smssample;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.Build.VERSION_CODES;
|
||||
import android.provider.Telephony;
|
||||
import android.provider.Telephony.Sms.Intents;
|
||||
|
||||
public class Utils {
|
||||
|
||||
/**
|
||||
* Check if the device runs Android 4.3 (JB MR2) or higher.
|
||||
*/
|
||||
public static boolean hasJellyBeanMR2() {
|
||||
return Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR2;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the device runs Android 4.4 (KitKat) or higher.
|
||||
*/
|
||||
public static boolean hasKitKat() {
|
||||
return Build.VERSION.SDK_INT >= VERSION_CODES.KITKAT;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if your app is the default system SMS app.
|
||||
* @param context The Context
|
||||
* @return True if it is default, False otherwise. Pre-KitKat will always return True.
|
||||
*/
|
||||
public static boolean isDefaultSmsApp(Context context) {
|
||||
if (hasKitKat()) {
|
||||
return context.getPackageName().equals(Telephony.Sms.getDefaultSmsPackage(context));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Trigger the intent to open the system dialog that asks the user to change the default
|
||||
* SMS app.
|
||||
* @param context The Context
|
||||
*/
|
||||
public static void setDefaultSmsApp(Context context) {
|
||||
// This is a new intent which only exists on KitKat
|
||||
if (hasKitKat()) {
|
||||
Intent intent = new Intent(Intents.ACTION_CHANGE_DEFAULT);
|
||||
intent.putExtra(Intents.EXTRA_PACKAGE_NAME, context.getPackageName());
|
||||
context.startActivity(intent);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
/*
|
||||
* Copyright (C) 2013 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.example.android.smssample.receiver;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.provider.Telephony.Sms.Intents;
|
||||
import android.support.v4.content.WakefulBroadcastReceiver;
|
||||
|
||||
import com.example.android.smssample.service.MessagingService;
|
||||
import com.example.android.smssample.Utils;
|
||||
|
||||
/**
|
||||
* The main messaging receiver class. Note that this is not directly included in
|
||||
* AndroidManifest.xml, instead, subclassed versions of this are included which allows
|
||||
* them to be enabled/disabled independently as they will have a unique component name.
|
||||
*/
|
||||
public class MessagingReceiver extends WakefulBroadcastReceiver {
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
String action = intent == null ? null : intent.getAction();
|
||||
|
||||
// If on KitKat+ and default messaging app then look for new deliver actions actions.
|
||||
if (Utils.hasKitKat() && Utils.isDefaultSmsApp(context)) {
|
||||
if (Intents.SMS_DELIVER_ACTION.equals(action)) {
|
||||
handleIncomingSms(context, intent);
|
||||
} else if (Intents.WAP_PUSH_DELIVER_ACTION.equals(action)) {
|
||||
handleIncomingMms(context, intent);
|
||||
}
|
||||
} else { // Otherwise look for old pre-KitKat actions
|
||||
if (Intents.SMS_RECEIVED_ACTION.equals(action)) {
|
||||
handleIncomingSms(context, intent);
|
||||
} else if (Intents.WAP_PUSH_RECEIVED_ACTION.equals(action)) {
|
||||
handleIncomingMms(context, intent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void handleIncomingSms(Context context, Intent intent) {
|
||||
// TODO: Handle SMS here
|
||||
// As an example, we'll start a wakeful service to handle the SMS
|
||||
intent.setAction(MessagingService.ACTION_MY_RECEIVE_SMS);
|
||||
intent.setClass(context, MessagingService.class);
|
||||
startWakefulService(context, intent);
|
||||
}
|
||||
|
||||
private void handleIncomingMms(Context context, Intent intent) {
|
||||
// TODO: Handle MMS here
|
||||
// As an example, we'll start a wakeful service to handle the MMS
|
||||
intent.setAction(MessagingService.ACTION_MY_RECEIVE_MMS);
|
||||
intent.setClass(context, MessagingService.class);
|
||||
startWakefulService(context, intent);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* Copyright (C) 2013 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.example.android.smssample.receiver;
|
||||
|
||||
/**
|
||||
* Stub subclass to allow individual receiver components in AndroidManifest to be enabled/disabled.
|
||||
*/
|
||||
public class MmsReceiver extends MessagingReceiver {
|
||||
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* Copyright (C) 2013 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.example.android.smssample.receiver;
|
||||
|
||||
/**
|
||||
* Stub subclass to allow individual receiver components in AndroidManifest to be enabled/disabled.
|
||||
*/
|
||||
public class MmsReceiverLegacy extends MessagingReceiver {
|
||||
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* Copyright (C) 2013 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.example.android.smssample.receiver;
|
||||
|
||||
/**
|
||||
* Stub subclass to allow individual receiver components in AndroidManifest to be enabled/disabled.
|
||||
*/
|
||||
public class SmsReceiver extends MessagingReceiver {
|
||||
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* Copyright (C) 2013 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.example.android.smssample.receiver;
|
||||
|
||||
/**
|
||||
* Stub subclass to allow individual receiver components in AndroidManifest to be enabled/disabled.
|
||||
*/
|
||||
public class SmsReceiverLegacy extends MessagingReceiver {
|
||||
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
* Copyright (C) 2013 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.example.android.smssample.service;
|
||||
|
||||
import android.app.IntentService;
|
||||
import android.content.Intent;
|
||||
|
||||
import com.example.android.smssample.receiver.MessagingReceiver;
|
||||
|
||||
/**
|
||||
* This service is triggered internally only and is used to process incoming SMS and MMS messages
|
||||
* that the {@link com.example.android.smssample.receiver.MessagingReceiver} passes over. It's
|
||||
* preferable to handle these in a service in case there is significant work to do which may exceed
|
||||
* the time allowed in a receiver.
|
||||
*/
|
||||
public class MessagingService extends IntentService {
|
||||
private static final String TAG = "MessagingService";
|
||||
|
||||
// These actions are for this app only and are used by MessagingReceiver to start this service
|
||||
public static final String ACTION_MY_RECEIVE_SMS = "com.example.android.smssample.RECEIVE_SMS";
|
||||
public static final String ACTION_MY_RECEIVE_MMS = "com.example.android.smssample.RECEIVE_MMS";
|
||||
|
||||
public MessagingService() {
|
||||
super(TAG);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onHandleIntent(Intent intent) {
|
||||
if (intent != null) {
|
||||
String intentAction = intent.getAction();
|
||||
if (ACTION_MY_RECEIVE_SMS.equals(intentAction)) {
|
||||
// TODO: Handle incoming SMS
|
||||
|
||||
// Ensure wakelock is released that was created by the WakefulBroadcastReceiver
|
||||
MessagingReceiver.completeWakefulIntent(intent);
|
||||
} else if (ACTION_MY_RECEIVE_MMS.equals(intentAction)) {
|
||||
// TODO: Handle incoming MMS
|
||||
|
||||
// Ensure wakelock is released that was created by the WakefulBroadcastReceiver
|
||||
MessagingReceiver.completeWakefulIntent(intent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Copyright (C) 2013 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.example.android.smssample.service;
|
||||
|
||||
import android.app.IntentService;
|
||||
import android.content.Intent;
|
||||
import android.telephony.TelephonyManager;
|
||||
|
||||
import com.example.android.smssample.Utils;
|
||||
|
||||
/**
|
||||
* This service handles the system intent ACTION_RESPOND_VIA_MESSAGE when we are the default SMS
|
||||
* app.
|
||||
*/
|
||||
public class RespondService extends IntentService {
|
||||
private static final String TAG = "RespondService";
|
||||
|
||||
public RespondService() {
|
||||
super(TAG);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onHandleIntent(Intent intent) {
|
||||
if (intent != null) {
|
||||
if (Utils.hasJellyBeanMR2() && Utils.isDefaultSmsApp(this) &&
|
||||
// ACTION_RESPOND_VIA_MESSAGE was added in JB MR2
|
||||
TelephonyManager.ACTION_RESPOND_VIA_MESSAGE.equals(intent.getAction())) {
|
||||
// TODO: Handle "respond via message" quick reply
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 3.9 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.4 KiB |
Binary file not shown.
After Width: | Height: | Size: 5.4 KiB |
Binary file not shown.
After Width: | Height: | Size: 9.7 KiB |
|
@ -0,0 +1,93 @@
|
|||
<!--
|
||||
Copyright (C) 2013 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
tools:context=".MainActivity">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/set_default_sms_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
android:background="@color/alert_orange">
|
||||
|
||||
<Button
|
||||
android:id="@+id/set_default_sms_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_margin="@dimen/standard_margin"
|
||||
android:text="@string/choose_sms_app" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/set_default_sms_textview"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toLeftOf="@+id/set_default_sms_button"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_margin="@dimen/standard_margin"
|
||||
android:text="@string/set_default_sms_text" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<ListView
|
||||
android:id="@android:id/list"
|
||||
android:layout_height="0dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:fastScrollEnabled="true" />
|
||||
|
||||
<TextView
|
||||
android:id="@android:id/empty"
|
||||
android:layout_height="0dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:visibility="gone"
|
||||
android:layout_margin="@dimen/standard_margin"
|
||||
style="?android:textAppearanceMedium"
|
||||
android:text="@string/sms_empty" />
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/send_sms_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="@dimen/standard_margin"
|
||||
android:background="@color/light_gray">
|
||||
|
||||
<Button
|
||||
android:id="@+id/send_sms_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:text="@string/sms_send" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/send_sms_edittext"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toLeftOf="@+id/send_sms_button"
|
||||
android:layout_centerVertical="true"
|
||||
android:hint="@string/sms_send_new_hint"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
</LinearLayout>
|
|
@ -0,0 +1,23 @@
|
|||
<!--
|
||||
Copyright (C) 2013 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:id="@+id/action_default"
|
||||
android:title="@string/action_settings"
|
||||
android:orderInCategory="100"
|
||||
android:showAsAction="never" />
|
||||
|
||||
</menu>
|
|
@ -0,0 +1,26 @@
|
|||
<!--
|
||||
Copyright (C) 2013 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<resources>
|
||||
|
||||
<!--
|
||||
Base application theme for API 11+. This theme completely replaces
|
||||
AppBaseTheme from res/values/styles.xml on API 11+ devices.
|
||||
-->
|
||||
<style name="AppBaseTheme" parent="android:Theme.Holo.Light">
|
||||
<!-- API 11 theme customizations can go here. -->
|
||||
</style>
|
||||
|
||||
</resources>
|
|
@ -0,0 +1,19 @@
|
|||
<!--
|
||||
Copyright (C) 2013 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<resources>
|
||||
<bool name="hasKitKat">true</bool>
|
||||
<bool name="preKitKat">false</bool>
|
||||
</resources>
|
|
@ -0,0 +1,19 @@
|
|||
<!--
|
||||
Copyright (C) 2013 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<resources>
|
||||
<bool name="hasKitKat">false</bool>
|
||||
<bool name="preKitKat">true</bool>
|
||||
</resources>
|
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<resources>
|
||||
<color name="alert_orange">#FFBB33</color>
|
||||
<color name="light_gray">#F4F4F4</color>
|
||||
</resources>
|
|
@ -0,0 +1,19 @@
|
|||
<!--
|
||||
Copyright (C) 2013 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<resources>
|
||||
<!-- Default screen margins, per the Android Design guidelines. -->
|
||||
<dimen name="standard_margin">8dp</dimen>
|
||||
</resources>
|
|
@ -0,0 +1,28 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<resources>
|
||||
|
||||
<string name="app_name">SmsDemoApp</string>
|
||||
<string name="action_settings">Settings</string>
|
||||
<string name="choose_sms_app">Set as default</string>
|
||||
<string name="sms_empty">No SMS messages</string>
|
||||
<string name="set_default_sms_text">This app is not the default SMS app</string>
|
||||
<string name="sms_send_new_hint">Send new SMS</string>
|
||||
<string name="sms_send">Send</string>
|
||||
<string name="sms_send_disabled">SMS Sending Disabled</string>
|
||||
|
||||
</resources>
|
|
@ -0,0 +1,35 @@
|
|||
<!--
|
||||
Copyright (C) 2013 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<resources>
|
||||
|
||||
<!--
|
||||
Base application theme, dependent on API level. This theme is replaced
|
||||
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
|
||||
-->
|
||||
<style name="AppBaseTheme" parent="android:Theme.Light">
|
||||
<!--
|
||||
Theme customizations available in newer API levels can go in
|
||||
res/values-vXX/styles.xml, while customizations related to
|
||||
backward-compatibility can go here.
|
||||
-->
|
||||
</style>
|
||||
|
||||
<!-- Application theme. -->
|
||||
<style name="AppTheme" parent="AppBaseTheme">
|
||||
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
|
||||
</style>
|
||||
|
||||
</resources>
|
Loading…
Add table
Add a link
Reference in a new issue