1

I have application , which is using google SlidingTabLayout.And each tab titles are different location names and it is database driven.In application i am using gcm push notifcations and before and notifiactions are about different locations, keeping the track of locationId with the help of Shared Preferences. And on opening the MainActivity from the notification , I need to go the specific location tab. Please help me This is MainActivity code for declaring tabs

                          try {

                                SQLiteDatabase sqLiteDatabase;
                                sqLiteDatabase = fhiSqLiteDatabase.getReadableDatabase();
                                String readQuery = "SELECT * FROM " + DatabaseConstants.TableLocation.TABLE_NAME;
                                Cursor cursor = sqLiteDatabase.rawQuery(readQuery, null);
                                if (cursor.moveToFirst()) {
                                    Log.d("My Log", "Inside Cursor");
                                    locationCount = 0;
                                    do {
                                        Log.d("My Log", "Inside Cursor, Inside do");
                                        try {

                                            String location = cursor.getString(cursor.getColumnIndex(DatabaseConstants.TableLocation.COLUMN_LOCATION_NAME));
                                            Log.d(Constants.LOG_TAG, " Location " + location);
                                            Titles[locationCount] = location;
                                            locationCount++;
                                            Log.d(Constants.LOG_TAG, Titles[locationCount].toString());

                                        } catch (Exception e) {
                                            Log.d("My Log", e.toString());

                                        }
                                        Log.d("My Log", Titles[locationCount]);
                                    }
                                    while (cursor.moveToNext());

                                }
                            } catch (Exception e) {
                                Log.d("My Log", e.toString());
                            }

                            Numboftabs = locationCount;

                            // Creating The ViewPagerAdapter and Passing Fragment Manager, Titles fot the Tabs and Number Of Tabs.
                            adapter = new ViewPagerAdapter(getSupportFragmentManager(), Titles, Numboftabs);

                            // Assigning ViewPager View and setting the adapter
                            pager = (ViewPager) findViewById(R.id.pager);
                            pager.setAdapter(adapter);

                            // Assiging the Sliding Tab Layout View
                            tabs = (SlidingTabLayout) findViewById(R.id.tabs);
                            tabs.setDistributeEvenly(true); // To make the Tabs Fixed set this true, This makes the tabs Space Evenly in Available width

                            // Setting Custom Color for the Scroll bar indicator of the Tab View
                            tabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
                                @Override
                                public int getIndicatorColor(int position) {
                                    return getResources().getColor(R.color.tabsScrollColor);



                                }
                            });

                            // Setting the ViewPager For the SlidingTabsLayout
                            tabs.setViewPager(pager);

User Notificationis handled by a method sendNotification

   private void sendNotification(int planId,String notification,int updateId)         
  {
   if(updateId==0)
    {
        Cursor cursor=fhiSqLiteDatabase.getAllBatchPlanDetails(planId);
        sharedPreferencesToday = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
        if (cursor != null && cursor.moveToFirst()) {
            int locationId=cursor.getInt(cursor.getColumnIndex(DatabaseConstants.TableTourBatchPlan.COLUMN_LOCATION_ID));
            Log.d(Constants.LOG_TAG, "Count Update item is for location Id : "+locationId);
            SharedPreferences.Editor editor = sharedPreferencesToday.edit();
            editor.putInt(locationIdShared,locationId);
            editor.commit();
        }
        Log.d(Constants.LOG_TAG," User Notification For Cont Update ");
        Intent resultIntent = new Intent(this, MainActivity.class);

        resultIntent.putExtra("msg", notification);
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
     // Adds the back stack
        stackBuilder.addParentStack(MainActivity.class);
      // Adds the Intent to the top of the stack
        stackBuilder.addNextIntent(resultIntent);
        // Gets a PendingIntent containing the entire back stack
        PendingIntent resultPendingIntent =
                stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);



        NotificationCompat.Builder mNotifyBuilder;
        NotificationManager mNotificationManager;

        mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        mNotifyBuilder = new NotificationCompat.Builder(this)
                .setContentTitle("FHI")
                .setContentText(notification)
                .setNumber(++countNum)
                .setSmallIcon(R.drawable.group_38_std)
                .setTicker("FHI :New Count Update ")
        ;
        // Set pending intent
        mNotifyBuilder.setContentIntent(resultPendingIntent);

        // Set Vibrate, Sound and Light
        int defaults = 0;
        defaults = defaults | Notification.DEFAULT_LIGHTS;
        defaults = defaults | Notification.DEFAULT_VIBRATE;
        defaults = defaults | Notification.DEFAULT_SOUND;


        mNotifyBuilder.setDefaults(defaults);
        // Set the content for Notification
        //mNotifyBuilder.setContentText(diff + " message: " + notification);
        mNotifyBuilder.setContentText(notification);


        // Set autoCancel
        mNotifyBuilder.setAutoCancel(true);
        // Post a notification
        mNotificationManager.notify(notifyIdCount, mNotifyBuilder.build());
    }

}

After this I changed the slidingTabLayout to get tab to get Selected on clicking on user notification , Changed methods are onAttachedToWindow()&private class TabClickListener implements OnClickListener

   public class SlidingTabLayout extends HorizontalScrollView 
 {
/**
 * Allows complete control over the colors drawn in the tab layout. Set with
 * {@link #setCustomTabColorizer(TabColorizer)}.
 */
public interface TabColorizer {

    /**
     * @return return the color of the indicator used when {@code position} is selected.
     */
    int getIndicatorColor(int position);

}

private static final int TITLE_OFFSET_DIPS = 24;
private static final int TAB_VIEW_PADDING_DIPS = 16;
private static final int TAB_VIEW_TEXT_SIZE_SP = 12;
private static final int TAB_VIEW_NOTIFICATION_TEXT_SIZE_SP=10;

private int mTitleOffset;

private int mTabViewLayoutId;
private int mTabViewTextViewId;
private boolean mDistributeEvenly;
TextView textViewUnreadMessages;

private ViewPager mViewPager;
private SparseArray<String> mContentDescriptions = new SparseArray<String>();
private ViewPager.OnPageChangeListener mViewPagerPageChangeListener;

private final SlidingTabStrip mTabStrip;

public SlidingTabLayout(Context context)
{
    this(context, null);
}

public SlidingTabLayout(Context context, AttributeSet attrs)
{
    this(context, attrs, 0);
}

public SlidingTabLayout(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

    // Disable the Scroll Bar
    setHorizontalScrollBarEnabled(false);
    // Make sure that the Tab Strips fills this View
    setFillViewport(true);

    mTitleOffset = (int) (TITLE_OFFSET_DIPS * getResources().getDisplayMetrics().density);

    mTabStrip = new SlidingTabStrip(context);
    addView(mTabStrip, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
}

/**
 * Set the custom {@link TabColorizer} to be used.
 *
 * If you only require simple custmisation then you can use
 * {@link #setSelectedIndicatorColors(int...)} to achieve
 * similar effects.
 */
public void setCustomTabColorizer(TabColorizer tabColorizer) {
    mTabStrip.setCustomTabColorizer(tabColorizer);
}

public void setDistributeEvenly(boolean distributeEvenly) {
    mDistributeEvenly = distributeEvenly;
}

/**
 * Sets the colors to be used for indicating the selected tab. These colors are treated as a
 * circular array. Providing one color will mean that all tabs are indicated with the same color.
 */
public void setSelectedIndicatorColors(int... colors) {
    mTabStrip.setSelectedIndicatorColors(colors);
}

/**
 * Set the {@link android.support.v4.view.ViewPager.OnPageChangeListener}. When using {@link SlidingTabLayout} you are
 * required to set any {@link android.support.v4.view.ViewPager.OnPageChangeListener} through this method. This is so
 * that the layout can update it's scroll position correctly.
 *
 * @see android.support.v4.view.ViewPager#setOnPageChangeListener(android.support.v4.view.ViewPager.OnPageChangeListener)
 */
public void setOnPageChangeListener(ViewPager.OnPageChangeListener listener) {
    Log.d(Constants.LOG_TAG," To check Tab Change setOnPageChangeListener(ViewPager.OnPageChangeListener listener) ");
    mViewPagerPageChangeListener = listener;
}

/**
 * Set the custom layout to be inflated for the tab views.
 *
 * @param layoutResId Layout id to be inflated
 * @param textViewId id of the {@link android.widget.TextView} in the inflated view
 */
public void setCustomTabView(int layoutResId, int textViewId) {
    mTabViewLayoutId = layoutResId;
    mTabViewTextViewId = textViewId;
}

/**
 * Sets the associated view pager. Note that the assumption here is that the pager content
 * (number of tabs and tab titles) does not change after this call has been made.
 */
public void setViewPager(ViewPager viewPager) {
    mTabStrip.removeAllViews();

    mViewPager = viewPager;
    if (viewPager != null) {
        viewPager.setOnPageChangeListener(new InternalViewPagerListener());
        populateTabStrip();
    }
}

/**
 * Create a default view to be used for tabs. This is called if a custom tab view is not set via
 * {@link #setCustomTabView(int, int)}.
 */
protected TextView createDefaultTabView(Context context) {
    View v = LayoutInflater.from(context).inflate(R.layout.tab_loc_notification, null);


    TextView textView = new TextView(context);
    textView.setGravity(Gravity.CENTER);
    textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, TAB_VIEW_TEXT_SIZE_SP);
    textView.setTextColor(Color.WHITE);

    textView.setTypeface(Typeface.DEFAULT_BOLD);
    textView.setLayoutParams(new LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

    TypedValue outValue = new TypedValue();
    getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground,
            outValue, true);
    textView.setBackgroundResource(outValue.resourceId);
    textView.setAllCaps(false);

    int padding = (int) (TAB_VIEW_PADDING_DIPS * getResources().getDisplayMetrics().density);
    textView.setPadding(padding, padding, padding, padding);

    return textView;
}
protected TextView createDefaultTabViewNotification(Context context)
{
    TextView textViewNotification=new TextView(context);
    textViewNotification.setGravity(Gravity.RIGHT);
    textViewNotification.setTextSize(TypedValue.COMPLEX_UNIT_SP, TAB_VIEW_NOTIFICATION_TEXT_SIZE_SP);
    textViewNotification.setTextColor(Color.WHITE);
    textViewNotification.setBackgroundDrawable(getContext().getResources().getDrawable(R.drawable.badge_std_circle));
    textViewNotification.setLayoutParams(new LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
    TypedValue outValue = new TypedValue();
    getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground,
            outValue, true);
    textViewNotification.setAllCaps(false);

    int padding = (int) (TAB_VIEW_PADDING_DIPS * getResources().getDisplayMetrics().density);
    textViewNotification.setPadding(padding, padding, padding, padding);
    return textViewNotification;
}


private void populateTabStrip() {
    final PagerAdapter adapter = mViewPager.getAdapter();
    final OnClickListener tabClickListener = new TabClickListener();

    for (int i = 0; i < adapter.getCount(); i++) {
        View tabView = null;
        TextView tabTitleView = null;

        if (mTabViewLayoutId != 0) {
            // If there is a custom tab view layout id set, try and inflate it
            tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip,
                    false);
            tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId);
        }

        if (tabView == null) {
            tabView = createDefaultTabView(getContext());
        }

        if (tabTitleView == null && TextView.class.isInstance(tabView)) {
            tabTitleView = (TextView) tabView;
        }

        if (mDistributeEvenly) {
            LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) tabView.getLayoutParams();
            lp.width = 0;
            lp.weight = 1;
        }

        tabTitleView.setText(adapter.getPageTitle(i));
        tabView.setOnClickListener(tabClickListener);
        String desc = mContentDescriptions.get(i, null);
        if (desc != null) {
            tabView.setContentDescription(desc);
        }

        mTabStrip.addView(tabView);
        if (i == mViewPager.getCurrentItem()) {
            tabView.setSelected(true);
        }
    }
}
public void setContentDescription(int i, String desc)
{
    mContentDescriptions.put(i, desc);
}

@Override
protected void onAttachedToWindow()
{
    super.onAttachedToWindow();
    final String MyPREFERENCES = "MyPrefs" ;
    String dateTimeToolbarTitle="DateTime";
    String locationIdShared="LocationId";
    SharedPreferences sharedPreferencesToday =getContext().getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
    int locationId=sharedPreferencesToday.getInt(locationIdShared,1);
    if (mViewPager != null) {
       // scrollToTab(locationId-1,0);
        mViewPager.setCurrentItem(locationId-1,true);
        //smoothScrollTo(locationId - 1, locationId - 1);
       // scrollTo(locationId - 1, locationId - 1);
        //mViewPager.setCurrentItem(locationId-1);
        //scrollToTab(mViewPager.getCurrentItem(),locationId-1);

        MainActivity.fillDataToTourPoint(locationId);
    }
}

private void scrollToTab(int tabIndex, int positionOffset)
{
    final int tabStripChildCount = mTabStrip.getChildCount();
    if (tabStripChildCount == 0 || tabIndex < 0 || tabIndex >= tabStripChildCount) {
        return;
    }

    View selectedChild = mTabStrip.getChildAt(tabIndex);
    if (selectedChild != null) {
        int targetScrollX = selectedChild.getLeft() + positionOffset;

        if (tabIndex > 0 || positionOffset > 0) {
            // If we're not at the first child and are mid-scroll, make sure we obey the offset
            targetScrollX -= mTitleOffset;
        }

        scrollTo(targetScrollX, 0);
    }
}

private class InternalViewPagerListener implements ViewPager.OnPageChangeListener
{
    private int mScrollState;

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        int tabStripChildCount = mTabStrip.getChildCount();
        if ((tabStripChildCount == 0) || (position < 0) || (position >= tabStripChildCount)) {
            return;
        }

        mTabStrip.onViewPagerPageChanged(position, positionOffset);

        View selectedTitle = mTabStrip.getChildAt(position);
        int extraOffset = (selectedTitle != null)
                ? (int) (positionOffset * selectedTitle.getWidth())
                : 0;
        scrollToTab(position, extraOffset);

        if (mViewPagerPageChangeListener != null) {
            mViewPagerPageChangeListener.onPageScrolled(position, positionOffset,
                    positionOffsetPixels);
        }
    }

    @Override
    public void onPageScrollStateChanged(int state)
    {
        Log.d(Constants.LOG_TAG," To check Tab Change  onPageScrollStateChanged(int state)");
        mScrollState = state;

        if (mViewPagerPageChangeListener != null) {
            mViewPagerPageChangeListener.onPageScrollStateChanged(state);
        }
    }

    @Override
    public void onPageSelected(int position) {
        if (mScrollState == ViewPager.SCROLL_STATE_IDLE) {
            mTabStrip.onViewPagerPageChanged(position, 0f);
            scrollToTab(position, 0);
        }
        for (int i = 0; i < mTabStrip.getChildCount(); i++) {
            mTabStrip.getChildAt(i).setSelected(position == i);
        }
        if (mViewPagerPageChangeListener != null) {
            mViewPagerPageChangeListener.onPageSelected(position);
        }
    }

}

private class TabClickListener implements OnClickListener
{
    final PagerAdapter adapter = mViewPager.getAdapter();
    ListView updateWidgetListView;
    public static final String MyPREFERENCES = "MyPrefs" ;
    String dateTimeToolbarTitle="DateTime";
   String locationIdShared="LocationId";
     @Override
    public void onClick(View v)
    {
        for (int i = 0; i < mTabStrip.getChildCount(); i++) {
            if (v == mTabStrip.getChildAt(i))
            {
                SharedPreferences sharedPreferencesToday =getContext().getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
                String dateShared=sharedPreferencesToday.getString(dateTimeToolbarTitle,"");
                SharedPreferences.Editor editor = sharedPreferencesToday.edit();

                editor.putInt(locationIdShared,i+1);
                editor.commit();

                mViewPager.setCurrentItem(i);
                String location= (String) adapter.getPageTitle(i);
                Log.d(Constants.LOG_TAG, " Location " + location + " position " + i);
                FHI_SQLite_Database fhiSqLiteDatabase=new FHI_SQLite_Database(getContext());


                long dateSharedToday=0;
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");


                Log.d(Constants.LOG_TAG," ValidUntilTimeSpan of LoginCall converted into DateFormat");

                try {
                    Date convertedDate;
                    convertedDate = dateFormat.parse(dateShared);
                    Log.d(Constants.LOG_TAG, " Date shared using shared preferences" + convertedDate.toString());
                    dateSharedToday = convertedDate.getTime();
                    Log.d(Constants.LOG_TAG, "Converted date in date format to long int format " + dateSharedToday);

                } catch (ParseException e) {
                    e.printStackTrace();
                }


                return;
            }
        }
    }
}

}

Punit Sharma
  • 2,951
  • 1
  • 20
  • 35
Shaharban T A
  • 79
  • 1
  • 5

0 Answers0