Sunday, July 21, 2019

Widget Demo

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

Insert,Update and delete in Device Calender

Androidmanifest.xml < uses-permission android :name ="android.permission.WRITE_CALENDAR" /> < uses-permission androi...