CMSDK: Add a sample showing custom tile toggle.

Change-Id: Icba72a5454b0245d9030e91020609b18ba503ef7
This commit is contained in:
Adnan Begovic 2015-05-01 02:27:34 -07:00
parent 1832e1fd51
commit 9a3035b912
11 changed files with 230 additions and 0 deletions

View File

@ -0,0 +1,11 @@
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_STATIC_JAVA_LIBRARIES := \
org.cyanogenmod.platform.sdk
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := CMCustomTiles
include $(BUILD_PACKAGE)

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.cyanogenmod.samples.customtiles"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android.permission.PUBLISH_CUSTOM_TILE" />
<application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
<activity android:name="MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<receiver android:name="TileReceiver" >
<intent-filter>
<action android:name="org.cyanogenmod.samples.customtiles.ACTION_TOGGLE_STATE"/>
</intent-filter>
</receiver>
</application>
</manifest>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal"
>
<Button
android:id="@+id/custom_tile_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/custom_tile_publish"/>
</LinearLayout>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Custom Tile Sample</string>
<string name="custom_tile_publish">Publish tile</string>
</resources>

View File

@ -0,0 +1,77 @@
/**
* Copyright (c) 2015, The CyanogenMod 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 org.cyanogenmod.samples.customtiles;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import cyanogenmod.app.CMStatusBarManager;
import cyanogenmod.app.CustomTile;
import org.cyanogenmod.samples.customtiles.R;
/**
* Example sample activity to publish a tile with a toggle state
*/
public class MainActivity extends Activity implements View.OnClickListener {
public static final int REQUEST_CODE = 0;
public static final int CUSTOM_TILE_ID = 23;
public static final String ACTION_TOGGLE_STATE =
"org.cyanogenmod.samples.customtiles.ACTION_TOGGLE_STATE";
public static final String STATE = "state";
private Button mCustomTileButton;
private CustomTile mCustomTile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mCustomTileButton = (Button) findViewById(R.id.custom_tile_button);
mCustomTileButton.setOnClickListener(this);
Intent intent = new Intent();
intent.setAction(ACTION_TOGGLE_STATE);
intent.putExtra(MainActivity.STATE, States.STATE_OFF);
PendingIntent pendingIntent =
PendingIntent.getBroadcast(this, 0,
intent ,PendingIntent.FLAG_CANCEL_CURRENT);
mCustomTile = new CustomTile.Builder(this)
.setOnClickIntent(pendingIntent)
.setContentDescription("Generic content description")
.setLabel("CustomTile " + States.STATE_OFF)
.setIcon(R.drawable.ic_launcher)
.build();
}
@Override
public void onClick(View v) {
CMStatusBarManager.getInstance(this)
.publishTile(CUSTOM_TILE_ID, mCustomTile);
}
}

View File

@ -0,0 +1,25 @@
/**
* Copyright (c) 2015, The CyanogenMod 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 org.cyanogenmod.samples.customtiles;
/**
* Created by Adnan on 4/30/15.
*/
public class States {
public final static int STATE_OFF = 0;
public final static int STATE_ON = 1;
}

View File

@ -0,0 +1,75 @@
/**
* Copyright (c) 2015, The CyanogenMod 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 org.cyanogenmod.samples.customtiles;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.text.TextUtils;
import cyanogenmod.app.CMStatusBarManager;
import cyanogenmod.app.CustomTile;
import org.cyanogenmod.samples.customtiles.R;
/**
* Created by Adnan on 4/30/15.
*/
public class TileReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (MainActivity.ACTION_TOGGLE_STATE.equals(intent.getAction())) {
Intent newIntent = new Intent();
newIntent.setAction(MainActivity.ACTION_TOGGLE_STATE);
String label = "CustomTile " + States.STATE_OFF;
int state = getCurrentState(intent);
switch (state) {
case States.STATE_OFF:
newIntent.putExtra(MainActivity.STATE, States.STATE_ON);
label = "CustomTile " + States.STATE_ON;
break;
case States.STATE_ON:
newIntent.putExtra(MainActivity.STATE, States.STATE_OFF);
label = "CustomTile " + States.STATE_OFF;
break;
}
PendingIntent pendingIntent =
PendingIntent.getBroadcast(context, 0,
newIntent ,PendingIntent.FLAG_CANCEL_CURRENT);
CustomTile customTile = new CustomTile.Builder(context)
.setOnClickIntent(pendingIntent)
.setContentDescription("Generic content description")
.setLabel(label)
.setIcon(R.drawable.ic_launcher)
.build();
CMStatusBarManager.getInstance(context)
.publishTile(MainActivity.CUSTOM_TILE_ID, customTile);
}
}
private int getCurrentState(Intent intent) {
return intent.getIntExtra(MainActivity.STATE, 0);
}
}