MainActivity.java
package com.example.widget;import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
Activity activity=MainActivity.this;
Button btn_add,btn_display;
EditText et_name,et_mobile;
SqliteOpenhelper openhelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
initcomponent();
setListener();
}
private void init()
{
et_name=(EditText)findViewById(R.id.et_name);
et_mobile=(EditText)findViewById(R.id.et_mobile);
btn_add=(Button) findViewById(R.id.btn_add);
btn_display=(Button) findViewById(R.id.btn_display);
}
private void initcomponent()
{
openhelper=new SqliteOpenhelper(activity);
}
private void setListener()
{
btn_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name=et_name.getText().toString();
String mobile=et_mobile.getText().toString();
openhelper.Insertdata(name,mobile);
et_name.setText("");
et_mobile.setText("");
updateWidget();
}
});
btn_display.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(activity,displayActivity.class));
}
});
}
private void updateWidget() {
try {
Intent updateWidget = new Intent(activity, MyWidgetProvider.class);
updateWidget.setAction("update_widget");
PendingIntent pending = PendingIntent.getBroadcast(activity, 0, updateWidget, PendingIntent.FLAG_CANCEL_CURRENT);
pending.send();
} catch (PendingIntent.CanceledException e) {
Log.e("Error widgetTrial()=" , e.toString());
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp">
<EditText
android:id="@+id/et_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter Name"
android:textSize="15sp"
android:inputType="textPersonName"
android:textColor="@android:color/black"/>
<EditText
android:id="@+id/et_mobile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter Mobile no"
android:textSize="15sp"
android:inputType="number"
android:layout_marginTop="15dp"
android:textColor="@android:color/black"/>
<Button
android:id="@+id/btn_add"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Add"
android:layout_marginTop="20dp"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"/>
<Button
android:id="@+id/btn_display"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Display"
android:layout_marginTop="20dp"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"/>
</LinearLayout>
<com.jackandphantom.circularimageview.CircleImage
android:layout_width="200dp"
android:layout_height="200dp"
android:src="@drawable/user"
app:border_width="2dp"
app:border_color="#747272"
app:add_shadow="true"
app:shadow_color="#141414"
app:shadow_radius="15"
android:id="@+id/circleImage" />
</LinearLayout>
SqliteOpenhelper.java
package com.example.widget;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;
import com.example.widget.model.Datamodel;
import java.util.ArrayList;
public class SqliteOpenhelper extends SQLiteOpenHelper
{
SQLiteDatabase db;
Context context;
public SqliteOpenhelper(Context context) {
super(context, "Demo.db", null, 1);
this.context=context;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table IF NOT EXISTS demo_task (id INTEGER PRIMARY KEY AUTOINCREMENT,task_nm TEXT,task_no Text)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public void Insertdata(String name,String mobile_no)
{
db=getWritableDatabase();
ContentValues cv=new ContentValues();
cv.put("task_nm",name);
cv.put("task_no",mobile_no);
long f=db.insert("demo_task",null,cv);
if(f==-1)
{
Toast.makeText(context, "Not Inserted", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(context, "Inserted", Toast.LENGTH_SHORT).show();
}
}
public ArrayList<Datamodel> getdata()
{
ArrayList<Datamodel> list=new ArrayList<>();
db=getReadableDatabase();
Cursor c=db.rawQuery("select * from demo_task",null);
if(c.moveToFirst())
{
do {
Datamodel bean=new Datamodel();
bean.setTask_nm(c.getString(c.getColumnIndex("task_nm")));
bean.setTask_no(c.getString(c.getColumnIndex("task_no")));
list.add(bean);
}while (c.moveToNext());
}
Log.e("list===",list.toString());
return list;
}
}
Datamodel.java
package com.example.widget.model;
public class Datamodel
{
public String task_nm,task_no;
public String getTask_nm() {
return task_nm;
}
public void setTask_nm(String task_nm) {
this.task_nm = task_nm;
}
public String getTask_no() {
return task_no;
}
public void setTask_no(String task_no) {
this.task_no = task_no;
}
}
displayActivity.java
package com.example.widget;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import com.example.widget.Adapter.displayadapter;
import com.example.widget.model.Datamodel;
import java.util.ArrayList;
public class displayActivity extends AppCompatActivity {
RecyclerView rv;
ArrayList<Datamodel> listdata;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display);
init();
Setlistener();
}
private void init()
{
rv=(RecyclerView)findViewById(R.id.rv);
listdata=new ArrayList<>();
}
private void Setlistener()
{
SqliteOpenhelper openhelper=new SqliteOpenhelper(displayActivity.this);
listdata=openhelper.getdata();
LinearLayoutManager lm=new LinearLayoutManager(displayActivity.this);
displayadapter displayadapter=new displayadapter(listdata,displayActivity.this);
rv.setLayoutManager(lm);
rv.setAdapter(displayadapter);
}
}
activity_display.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".displayActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
displayadapter.java
package com.example.widget.Adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.example.widget.R;
import com.example.widget.displayActivity;
import com.example.widget.model.Datamodel;
import java.util.ArrayList;
public class displayadapter extends RecyclerView.Adapter<displayadapter.myViewholder>
{
ArrayList<Datamodel> listdata;
Context context;
public displayadapter(ArrayList<Datamodel> listdata, displayActivity context)
{
this.listdata=listdata;
this.context=context;
}
@NonNull
@Override
public myViewholder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View v= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_file,viewGroup,false);
myViewholder h=new myViewholder(v);
return h;
}
@Override
public void onBindViewHolder(@NonNull myViewholder myViewholder, int i)
{
myViewholder.txt_nm.setText(listdata.get(i).getTask_nm());
myViewholder.txt_no.setText(listdata.get(i).getTask_no());
}
@Override
public int getItemCount() {
return listdata.size();
}
public class myViewholder extends RecyclerView.ViewHolder
{
TextView txt_nm,txt_no;
public myViewholder(@NonNull View itemView) {
super(itemView);
txt_nm=(TextView)itemView.findViewById(R.id.txt_nm);
txt_no=(TextView)itemView.findViewById(R.id.txt_no);
}
}
}
item_file.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/txt_nm"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="15sp"
android:layout_margin="5dp"
android:textStyle="bold"
android:fontFamily="serif"
android:textColor="@android:color/black"
android:text="name"/>
<TextView
android:id="@+id/txt_no"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="15sp"
android:layout_margin="5dp"
android:textStyle="bold"
android:fontFamily="serif"
android:textColor="@android:color/black"
android:text="name"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="5dp"
android:background="@android:color/black"/>
</LinearLayout>
MyWidgetProvider.java
package com.example.widget;
import android.annotation.TargetApi;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.support.annotation.NonNull;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.Toast;
public class MyWidgetProvider extends AppWidgetProvider
{
private String TAG = "MyWidgetProvider";
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
// There may be multiple widgets active, so update all of them
final int N = appWidgetIds.length;
for (int i = 0; i < N; ++i)
{
RemoteViews remoteViews = updateWidgetListView(context, appWidgetIds[i]);
appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
Log.e(TAG, "onReceive: " + intent.getAction());
if (intent.getAction().equals("update_widget"))
{
// widget update started
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
R.layout.widget_layout);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
int appWidgetIds[] = appWidgetManager.getAppWidgetIds(new ComponentName(context, MyWidgetProvider.class));
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.widget_listView);
AppWidgetManager.getInstance(context).updateAppWidget(
new ComponentName(context, MyWidgetProvider.class), remoteViews);
}
}
@Override
public void onEnabled(Context context) {
// Enter relevant functionality for when the first widget is created
}
@Override
public void onDisabled(Context context) {
// Enter relevant functionality for when the last widget is disabled
}
private RemoteViews updateWidgetListView(Context context, int appWidgetId) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
R.layout.widget_layout);
Intent svcIntent = new Intent(context, StockWidgetService.class);
svcIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME)));
remoteViews.setRemoteAdapter(appWidgetId, R.id.widget_listView, svcIntent);
// click
/* Intent startActivityIntent = new Intent(context, MainActivity.class);
PendingIntent startActivityPendingIntent = PendingIntent.getActivity(context, 0, startActivityIntent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setPendingIntentTemplate(R.id.widget_listView, startActivityPendingIntent);*/
return remoteViews;
}
}
widget_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5sp"
android:background="@android:color/white"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/black"
android:fontFamily="serif"
android:maxLines="2"
android:paddingBottom="5dp"
android:text="Demo"
android:textColor="#fcfcfc"
android:textSize="16sp"
android:textStyle="bold" />
<ListView
android:id="@+id/widget_listView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white">
</ListView>
</LinearLayout>
StockWidgetService.java
package com.example.widget;
import android.content.Intent;
import android.util.Log;
import android.widget.RemoteViewsService;
public class StockWidgetService extends RemoteViewsService
{
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent)
{
Log.e("StockWidgetService","Calll");
return new WidgetTaskListProvider(this,intent);
}
}
WidgetTaskListProvider.java
package com.example.widget;
import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.RemoteViewsService;
import com.example.widget.model.Datamodel;
import java.util.ArrayList;
import java.util.List;
public class WidgetTaskListProvider implements RemoteViewsService.RemoteViewsFactory
{
public static List<Datamodel> taskList = new ArrayList<>();
private Context context = null;
private SqliteOpenhelper dataHelper;
private String TAG = "WidgetTaskListProvider";
public WidgetTaskListProvider(Context context, Intent intent)
{
Log.e("WidgetTaskLListProvider","flsdf");
this.context = context;
this.dataHelper = new SqliteOpenhelper(context);
/* appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);*/
taskList = dataHelper.getdata();
}
@Override
public void onCreate() {
}
@Override
public void onDataSetChanged() {
Log.e(TAG, "onDataSetChanged: ");
taskList = dataHelper.getdata();
}
@Override
public void onDestroy() {
}
@Override
public int getCount() {
return taskList.size();
}
@Override
public RemoteViews getViewAt(int position) {
final RemoteViews remoteView = new RemoteViews(
context.getPackageName(), R.layout.item_layout);
Datamodel listItem = taskList.get(position);
remoteView.setTextViewText(R.id.stock_symbol, listItem.task_nm);
// remoteView.setTextViewText(R.id.tvCategory, listItem.task_notes);
/* Bundle extras = new Bundle();
extras.putSerializable("Task_Bean", listItem);
Intent fillInIntent = new Intent();
fillInIntent.putExtras(extras);
remoteView.setOnClickFillInIntent(R.id.lrTaskView, fillInIntent);*/
return remoteView;
}
@Override
public RemoteViews getLoadingView() {
return null;
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public boolean hasStableIds() {
return true;
}
}
item_layout.xml
<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="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:background="@android:color/white">
<TextView
android:id="@+id/stock_symbol"
android:textSize="16sp"
android:padding="5dp"
android:textColor="@android:color/black"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="start|center_vertical"
tools:text="List Widget Item"
/>
</LinearLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.widget">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name=".displayActivity"></activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".MyWidgetProvider">
<!-- Add APPWIDGET_UPDATE intent filter here to receiver Widget Update -->
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<!-- Add app widget provider info xml in meta data -->
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/app_widget_provider" />
</receiver>
<service android:name=".StockWidgetService"
android:permission="android.permission.BIND_REMOTEVIEWS"/>
</application>
</manifest>
res/xml/app_widget_provider.xml
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/widget_layout"
android:minHeight="100dp"
android:minWidth="100dp"
android:previewImage="@drawable/ic_launcher_foreground"
android:updatePeriodMillis="1000000"
android:resizeMode="horizontal|vertical"
android:widgetCategory="home_screen|keyguard">
</appwidget-provider>
No comments:
Post a Comment