You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
11 KiB
153 lines
11 KiB
<html>
|
|
<head>
|
|
<title>NoteWidgetProvider.java</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<style type="text/css">
|
|
.s0 { color: #8c8c8c; font-style: italic;}
|
|
.s1 { color: #080808;}
|
|
.s2 { color: #0033b3;}
|
|
.s3 { color: #1750eb;}
|
|
.s4 { color: #067d17;}
|
|
</style>
|
|
</head>
|
|
<body bgcolor="#ffffff">
|
|
<table CELLSPACING=0 CELLPADDING=5 COLS=1 WIDTH="100%" BGCOLOR="#c0c0c0" >
|
|
<tr><td><center>
|
|
<font face="Arial, Helvetica" color="#000000">
|
|
NoteWidgetProvider.java</font>
|
|
</center></td></tr></table>
|
|
<pre><span class="s0">/*
|
|
* Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
|
|
*
|
|
* 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.
|
|
*/</span>
|
|
|
|
<span class="s2">package </span><span class="s1">net.micode.notes.widget;</span>
|
|
<span class="s2">import </span><span class="s1">android.app.PendingIntent;</span>
|
|
<span class="s2">import </span><span class="s1">android.appwidget.AppWidgetManager;</span>
|
|
<span class="s2">import </span><span class="s1">android.appwidget.AppWidgetProvider;</span>
|
|
<span class="s2">import </span><span class="s1">android.content.ContentValues;</span>
|
|
<span class="s2">import </span><span class="s1">android.content.Context;</span>
|
|
<span class="s2">import </span><span class="s1">android.content.Intent;</span>
|
|
<span class="s2">import </span><span class="s1">android.database.Cursor;</span>
|
|
<span class="s2">import </span><span class="s1">android.util.Log;</span>
|
|
<span class="s2">import </span><span class="s1">android.widget.RemoteViews;</span>
|
|
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.R;</span>
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.data.Notes;</span>
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.data.Notes.NoteColumns;</span>
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.tool.ResourceParser;</span>
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.ui.NoteEditActivity;</span>
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.ui.NotesListActivity;</span>
|
|
|
|
<span class="s2">public abstract class </span><span class="s1">NoteWidgetProvider </span><span class="s2">extends </span><span class="s1">AppWidgetProvider {</span>
|
|
<span class="s2">public static final </span><span class="s1">String [] PROJECTION = </span><span class="s2">new </span><span class="s1">String [] {</span>
|
|
<span class="s1">NoteColumns.ID,</span>
|
|
<span class="s1">NoteColumns.BG_COLOR_ID,</span>
|
|
<span class="s1">NoteColumns.SNIPPET</span>
|
|
<span class="s1">};</span>
|
|
|
|
<span class="s2">public static final int </span><span class="s1">COLUMN_ID = </span><span class="s3">0</span><span class="s1">;</span>
|
|
<span class="s2">public static final int </span><span class="s1">COLUMN_BG_COLOR_ID = </span><span class="s3">1</span><span class="s1">;</span>
|
|
<span class="s2">public static final int </span><span class="s1">COLUMN_SNIPPET = </span><span class="s3">2</span><span class="s1">;</span>
|
|
|
|
<span class="s2">private static final </span><span class="s1">String TAG = </span><span class="s4">"NoteWidgetProvider"</span><span class="s1">;</span>
|
|
|
|
<span class="s1">@Override</span>
|
|
<span class="s2">public void </span><span class="s1">onDeleted(Context context, </span><span class="s2">int</span><span class="s1">[] appWidgetIds) {</span>
|
|
<span class="s1">ContentValues values = </span><span class="s2">new </span><span class="s1">ContentValues();</span>
|
|
<span class="s1">values.put(NoteColumns.WIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);</span>
|
|
<span class="s2">for </span><span class="s1">(</span><span class="s2">int </span><span class="s1">i = </span><span class="s3">0</span><span class="s1">; i < appWidgetIds.length; i++) {</span>
|
|
<span class="s1">context.getContentResolver().update(Notes.CONTENT_NOTE_URI,</span>
|
|
<span class="s1">values,</span>
|
|
<span class="s1">NoteColumns.WIDGET_ID + </span><span class="s4">"=?"</span><span class="s1">,</span>
|
|
<span class="s2">new </span><span class="s1">String[] { String.valueOf(appWidgetIds[i])});</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private </span><span class="s1">Cursor getNoteWidgetInfo(Context context, </span><span class="s2">int </span><span class="s1">widgetId) {</span>
|
|
<span class="s2">return </span><span class="s1">context.getContentResolver().query(Notes.CONTENT_NOTE_URI,</span>
|
|
<span class="s1">PROJECTION,</span>
|
|
<span class="s1">NoteColumns.WIDGET_ID + </span><span class="s4">"=? AND " </span><span class="s1">+ NoteColumns.PARENT_ID + </span><span class="s4">"<>?"</span><span class="s1">,</span>
|
|
<span class="s2">new </span><span class="s1">String[] { String.valueOf(widgetId), String.valueOf(Notes.ID_TRASH_FOLER) },</span>
|
|
<span class="s2">null</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">protected void </span><span class="s1">update(Context context, AppWidgetManager appWidgetManager, </span><span class="s2">int</span><span class="s1">[] appWidgetIds) {</span>
|
|
<span class="s1">update(context, appWidgetManager, appWidgetIds, </span><span class="s2">false</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private void </span><span class="s1">update(Context context, AppWidgetManager appWidgetManager, </span><span class="s2">int</span><span class="s1">[] appWidgetIds,</span>
|
|
<span class="s2">boolean </span><span class="s1">privacyMode) {</span>
|
|
<span class="s2">for </span><span class="s1">(</span><span class="s2">int </span><span class="s1">i = </span><span class="s3">0</span><span class="s1">; i < appWidgetIds.length; i++) {</span>
|
|
<span class="s2">if </span><span class="s1">(appWidgetIds[i] != AppWidgetManager.INVALID_APPWIDGET_ID) {</span>
|
|
<span class="s2">int </span><span class="s1">bgId = ResourceParser.getDefaultBgId(context);</span>
|
|
<span class="s1">String snippet = </span><span class="s4">""</span><span class="s1">;</span>
|
|
<span class="s1">Intent intent = </span><span class="s2">new </span><span class="s1">Intent(context, NoteEditActivity.</span><span class="s2">class</span><span class="s1">);</span>
|
|
<span class="s1">intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);</span>
|
|
<span class="s1">intent.putExtra(Notes.INTENT_EXTRA_WIDGET_ID, appWidgetIds[i]);</span>
|
|
<span class="s1">intent.putExtra(Notes.INTENT_EXTRA_WIDGET_TYPE, getWidgetType());</span>
|
|
|
|
<span class="s1">Cursor c = getNoteWidgetInfo(context, appWidgetIds[i]);</span>
|
|
<span class="s2">if </span><span class="s1">(c != </span><span class="s2">null </span><span class="s1">&& c.moveToFirst()) {</span>
|
|
<span class="s2">if </span><span class="s1">(c.getCount() > </span><span class="s3">1</span><span class="s1">) {</span>
|
|
<span class="s1">Log.e(TAG, </span><span class="s4">"Multiple message with same widget id:" </span><span class="s1">+ appWidgetIds[i]);</span>
|
|
<span class="s1">c.close();</span>
|
|
<span class="s2">return</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">snippet = c.getString(COLUMN_SNIPPET);</span>
|
|
<span class="s1">bgId = c.getInt(COLUMN_BG_COLOR_ID);</span>
|
|
<span class="s1">intent.putExtra(Intent.EXTRA_UID, c.getLong(COLUMN_ID));</span>
|
|
<span class="s1">intent.setAction(Intent.ACTION_VIEW);</span>
|
|
<span class="s1">} </span><span class="s2">else </span><span class="s1">{</span>
|
|
<span class="s1">snippet = context.getResources().getString(R.string.widget_havenot_content);</span>
|
|
<span class="s1">intent.setAction(Intent.ACTION_INSERT_OR_EDIT);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">if </span><span class="s1">(c != </span><span class="s2">null</span><span class="s1">) {</span>
|
|
<span class="s1">c.close();</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s1">RemoteViews rv = </span><span class="s2">new </span><span class="s1">RemoteViews(context.getPackageName(), getLayoutId());</span>
|
|
<span class="s1">rv.setImageViewResource(R.id.widget_bg_image, getBgResourceId(bgId));</span>
|
|
<span class="s1">intent.putExtra(Notes.INTENT_EXTRA_BACKGROUND_ID, bgId);</span>
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Generate the pending intent to start host for the widget</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s1">PendingIntent pendingIntent = </span><span class="s2">null</span><span class="s1">;</span>
|
|
<span class="s2">if </span><span class="s1">(privacyMode) {</span>
|
|
<span class="s1">rv.setTextViewText(R.id.widget_text,</span>
|
|
<span class="s1">context.getString(R.string.widget_under_visit_mode));</span>
|
|
<span class="s1">pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i], </span><span class="s2">new </span><span class="s1">Intent(</span>
|
|
<span class="s1">context, NotesListActivity.</span><span class="s2">class</span><span class="s1">), PendingIntent.FLAG_UPDATE_CURRENT);</span>
|
|
<span class="s1">} </span><span class="s2">else </span><span class="s1">{</span>
|
|
<span class="s1">rv.setTextViewText(R.id.widget_text, snippet);</span>
|
|
<span class="s1">pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i], intent,</span>
|
|
<span class="s1">PendingIntent.FLAG_UPDATE_CURRENT);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s1">rv.setOnClickPendingIntent(R.id.widget_text, pendingIntent);</span>
|
|
<span class="s1">appWidgetManager.updateAppWidget(appWidgetIds[i], rv);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">protected abstract int </span><span class="s1">getBgResourceId(</span><span class="s2">int </span><span class="s1">bgId);</span>
|
|
|
|
<span class="s2">protected abstract int </span><span class="s1">getLayoutId();</span>
|
|
|
|
<span class="s2">protected abstract int </span><span class="s1">getWidgetType();</span>
|
|
<span class="s1">}</span>
|
|
</pre>
|
|
</body>
|
|
</html> |