Skip to content
Snippets Groups Projects
Commit 4e321af3 authored by John Carlson's avatar John Carlson
Browse files

Basis for making a project feed widget alongside the user feed widget

parent ba513daa
No related branches found
No related tags found
No related merge requests found
Showing
with 480 additions and 52 deletions
Loading
Loading
@@ -89,26 +89,33 @@
</intent-filter>
</activity>
 
<activity android:name=".widget.FeedWidgetConfigureActivity">
<activity android:name=".widget.UserFeedWidgetConfigureActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
</intent-filter>
</activity>
 
<receiver
android:name=".widget.FeedWidgetProvider"
android:label="GitLab Feed">
android:name=".widget.UserFeedWidgetProvider"
android:label="User Feed">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_feed" />
android:resource="@xml/widget_user_feed" />
</receiver>
 
<service
android:name=".widget.FeedWidgetService"
android:permission="android.permission.BIND_REMOTEVIEWS" />
<receiver
android:name=".widget.ProjectFeedWidgetProvider"
android:label="Project Feed">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_project_feed" />
</receiver>
 
</application>
 
Loading
Loading
package com.commit451.gitlab.fragment;
 
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
Loading
Loading
@@ -16,6 +17,7 @@ import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.DividerItemDecoration;
import com.commit451.gitlab.adapter.ProjectsAdapter;
import com.commit451.gitlab.api.GitLab;
import com.commit451.gitlab.model.api.Group;
import com.commit451.gitlab.model.api.Project;
import com.commit451.gitlab.navigation.Navigator;
Loading
Loading
@@ -71,13 +73,15 @@ public class ProjectsFragment extends ButterKnifeFragment {
@BindView(R.id.list) RecyclerView mProjectsListView;
@BindView(R.id.message_text) TextView mMessageView;
 
private LinearLayoutManager mLayoutManager;
private ProjectsAdapter mProjectsAdapter;
LinearLayoutManager mLayoutManager;
ProjectsAdapter mProjectsAdapter;
 
private int mMode;
private String mQuery;
private Uri mNextPageUrl;
private boolean mLoading = false;
int mMode;
String mQuery;
Uri mNextPageUrl;
boolean mLoading = false;
Listener mListener;
GitLab mGitLab;
 
private final RecyclerView.OnScrollListener mOnScrollListener = new RecyclerView.OnScrollListener() {
@Override
Loading
Loading
@@ -152,10 +156,25 @@ public class ProjectsFragment extends ButterKnifeFragment {
private final ProjectsAdapter.Listener mProjectsListener = new ProjectsAdapter.Listener() {
@Override
public void onProjectClicked(Project project) {
Navigator.navigateToProject(getActivity(), project);
if (mListener == null) {
Navigator.navigateToProject(getActivity(), project);
} else {
mListener.onProjectClicked(project);
}
}
};
 
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof Listener) {
mListener = (Listener) context;
mGitLab = mListener.getGitLab();
} else {
mGitLab = App.instance().getGitLab();
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Loading
Loading
@@ -201,20 +220,20 @@ public class ProjectsFragment extends ButterKnifeFragment {
switch (mMode) {
case MODE_ALL:
showLoading();
App.instance().getGitLab().getAllProjects().enqueue(mProjectsCallback);
mGitLab.getAllProjects().enqueue(mProjectsCallback);
break;
case MODE_MINE:
showLoading();
App.instance().getGitLab().getMyProjects().enqueue(mProjectsCallback);
mGitLab.getMyProjects().enqueue(mProjectsCallback);
break;
case MODE_STARRED:
showLoading();
App.instance().getGitLab().getStarredProjects().enqueue(mProjectsCallback);
mGitLab.getStarredProjects().enqueue(mProjectsCallback);
break;
case MODE_SEARCH:
if (mQuery != null) {
showLoading();
App.instance().getGitLab().searchAllProjects(mQuery).enqueue(mProjectsCallback);
mGitLab.searchAllProjects(mQuery).enqueue(mProjectsCallback);
}
break;
case MODE_GROUP:
Loading
Loading
@@ -223,7 +242,7 @@ public class ProjectsFragment extends ButterKnifeFragment {
if (group == null) {
throw new IllegalStateException("You must also pass a group if you want to show a groups projects");
}
App.instance().getGitLab().getGroupProjects(group.getId()).enqueue(mProjectsCallback);
mGitLab.getGroupProjects(group.getId()).enqueue(mProjectsCallback);
break;
default:
throw new IllegalStateException(mMode + " is not defined");
Loading
Loading
@@ -240,8 +259,8 @@ public class ProjectsFragment extends ButterKnifeFragment {
}
mLoading = true;
mProjectsAdapter.setLoading(true);
Timber.d("loadMore called for " + mNextPageUrl);
App.instance().getGitLab().getProjects(mNextPageUrl.toString()).enqueue(mMoreProjectsCallback);
Timber.d("loadMore called for %s", mNextPageUrl);
mGitLab.getProjects(mNextPageUrl.toString()).enqueue(mMoreProjectsCallback);
}
 
private void showLoading() {
Loading
Loading
@@ -264,4 +283,9 @@ public class ProjectsFragment extends ButterKnifeFragment {
loadData();
}
}
public interface Listener {
void onProjectClicked(Project project);
GitLab getGitLab();
}
}
Loading
Loading
@@ -27,9 +27,12 @@ public class AccountViewHolder extends TypedViewHolder<Account> {
return new AccountViewHolder(view);
}
 
@BindView(R.id.account_image) ImageView mImageView;
@BindView(R.id.account_username) TextView mUsernameView;
@BindView(R.id.account_server) TextView mServerView;
@BindView(R.id.account_image)
ImageView mImageView;
@BindView(R.id.account_username)
TextView mUsernameView;
@BindView(R.id.account_server)
TextView mServerView;
 
public AccountViewHolder(View view) {
super(view);
Loading
Loading
Loading
Loading
@@ -34,13 +34,24 @@ public class FeedRemoteViewsFactory implements RemoteViewsService.RemoteViewsFac
private static final int mCount = 10;
private Context mContext;
private int mAppWidgetId;
private String mFeedUrl;
private ArrayList<Entry> mEntries;
private Picasso mPicasso;
private GitLabRss mRssClient;
 
public FeedRemoteViewsFactory(Context context, Intent intent) {
public FeedRemoteViewsFactory(Context context, Intent intent, Account account, String url) {
mContext = context;
mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
mFeedUrl = url;
OkHttpClient.Builder gitlabRssClientBuilder = OkHttpClientFactory.create(account);
if (BuildConfig.DEBUG) {
gitlabRssClientBuilder.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY));
}
mRssClient = GitLabRssFactory.create(account, gitlabRssClientBuilder.build());
OkHttpClient.Builder picassoClientBuilder = OkHttpClientFactory.create(account);
mPicasso = PicassoFactory.createPicasso(picassoClientBuilder.build());
}
 
@Override
Loading
Loading
@@ -74,9 +85,9 @@ public class FeedRemoteViewsFactory implements RemoteViewsService.RemoteViewsFac
rv.setTextViewText(R.id.summary, entry.getSummary());
 
// Next, we set a fill-intent which will be used to fill-in the pending intent template
// which is set on the collection view in FeedWidgetProvider.
// which is set on the collection view in UserFeedWidgetProvider.
Intent fillInIntent = new Intent();
fillInIntent.putExtra(FeedWidgetProvider.EXTRA_LINK, entry.getLink().getHref().toString());
fillInIntent.putExtra(UserFeedWidgetProvider.EXTRA_LINK, entry.getLink().getHref().toString());
rv.setOnClickFillInIntent(R.id.root, fillInIntent);
 
try {
Loading
Loading
@@ -122,20 +133,9 @@ public class FeedRemoteViewsFactory implements RemoteViewsService.RemoteViewsFac
// from the network, etc., it is ok to do it here, synchronously. The widget will remain
// in its current state while work is being done here, so you don't need to worry about
// locking up the widget.
Account account = FeedWidgetPrefs.getAccount(mContext, mAppWidgetId);
if (account == null || account.getUser() == null || account.getUser().getFeedUrl() == null) {
//TODO show error state?
return;
}
OkHttpClient.Builder gitlabRssClientBuilder = OkHttpClientFactory.create(account);
if (BuildConfig.DEBUG) {
gitlabRssClientBuilder.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY));
}
GitLabRss rssClient = GitLabRssFactory.create(account, gitlabRssClientBuilder.build());
OkHttpClient.Builder picassoClientBuilder = OkHttpClientFactory.create(account);
mPicasso = PicassoFactory.createPicasso(picassoClientBuilder.build());
try {
Response<Feed> feedResponse = rssClient.getFeed(account.getUser().getFeedUrl().toString()).execute();
Response<Feed> feedResponse = mRssClient.getFeed(mFeedUrl).execute();
if (feedResponse.isSuccessful()) {
if (feedResponse.body().getEntries() != null) {
mEntries.addAll(feedResponse.body().getEntries());
Loading
Loading
package com.commit451.gitlab.widget;
import android.appwidget.AppWidgetManager;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.TextView;
import com.alexgwyn.recyclerviewsquire.ClickableArrayAdapter;
import com.commit451.gitlab.R;
import com.commit451.gitlab.activity.BaseActivity;
import com.commit451.gitlab.data.Prefs;
import com.commit451.gitlab.model.Account;
import com.commit451.gitlab.model.api.Project;
import org.parceler.Parcels;
import java.util.Collections;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import timber.log.Timber;
/**
* The configuration screen for the ExampleAppWidgetProvider widget sample.
*/
public class ProjectFeedWidgetConfigureActivity extends BaseActivity {
private static final int REQUEST_PROJECT = 1;
int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
@BindView(R.id.toolbar)
Toolbar mToolbar;
@BindView(R.id.message_text)
TextView mTextMessage;
@BindView(R.id.list)
RecyclerView mList;
AccountsAdapter mAccountAdapter;
Account mAccount;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setResult(RESULT_CANCELED);
setContentView(R.layout.activity_feed_widget_configure);
ButterKnife.bind(this);
// Find the widget id from the intent.
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null) {
mAppWidgetId = extras.getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
}
// If they gave us an intent without the widget id, just bail.
if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
finish();
}
mToolbar.setTitle(R.string.widget_choose_account);
mAccountAdapter = new AccountsAdapter();
mAccountAdapter.setOnItemClickListener(new ClickableArrayAdapter.OnItemClickListener<Account>() {
@Override
public void onItemClicked(ClickableArrayAdapter<Account, ?> adapter, View view, int position) {
mAccount = adapter.get(position);
moveAlongToChooseProject(mAccount);
}
});
mList.setLayoutManager(new LinearLayoutManager(this));
mList.setAdapter(mAccountAdapter);
loadAccounts();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REQUEST_PROJECT:
if (resultCode == RESULT_OK) {
Project project = Parcels.unwrap(data.getParcelableExtra(ProjectFeedWidgetConfigureProjectActivity.EXTRA_PROJECT));
saveWidgetConfig(mAccount, project);
}
break;
}
}
private void loadAccounts() {
List<Account> accounts = Prefs.getAccounts(this);
Timber.d("Got %s accounts", accounts.size());
Collections.sort(accounts);
Collections.reverse(accounts);
if (accounts.isEmpty()) {
mTextMessage.setVisibility(View.VISIBLE);
} else {
mTextMessage.setVisibility(View.GONE);
mAccountAdapter.clearAndFill(accounts);
}
}
private void moveAlongToChooseProject(Account account) {
Intent intent = ProjectFeedWidgetConfigureProjectActivity.newIntent(this, account);
startActivityForResult(intent, REQUEST_PROJECT);
}
private void saveWidgetConfig(Account account, Project project) {
ProjectFeedWidgetPrefs.setAccount(ProjectFeedWidgetConfigureActivity.this, mAppWidgetId, account);
ProjectFeedWidgetPrefs.setFeedUrl(ProjectFeedWidgetConfigureActivity.this, mAppWidgetId, project.getFeedUrl().toString());
Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_OK, resultValue);
finish();
}
}
package com.commit451.gitlab.widget;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import com.commit451.gitlab.R;
import com.commit451.gitlab.activity.BaseActivity;
import com.commit451.gitlab.activity.ProjectsActivity;
import com.commit451.gitlab.adapter.ProjectsPagerAdapter;
import com.commit451.gitlab.api.GitLab;
import com.commit451.gitlab.api.GitLabFactory;
import com.commit451.gitlab.api.OkHttpClientFactory;
import com.commit451.gitlab.fragment.ProjectsFragment;
import com.commit451.gitlab.model.Account;
import com.commit451.gitlab.model.api.Project;
import org.parceler.Parcels;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* You chose your account, now choose your project!
*/
public class ProjectFeedWidgetConfigureProjectActivity extends BaseActivity implements ProjectsFragment.Listener {
public static final String EXTRA_PROJECT = "project";
private static final String EXTRA_ACCOUNT = "account";
public static Intent newIntent(Context context, Account account) {
Intent intent = new Intent(context, ProjectsActivity.class);
intent.putExtra(EXTRA_ACCOUNT, Parcels.wrap(account));
return intent;
}
@BindView(R.id.tabs)
TabLayout mTabLayout;
@BindView(R.id.pager)
ViewPager mViewPager;
GitLab mGitLab;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_project_feed_widget_configure);
ButterKnife.bind(this);
Account account = Parcels.unwrap(getIntent().getParcelableExtra(EXTRA_ACCOUNT));
mGitLab = GitLabFactory.create(account, OkHttpClientFactory.create(account, false).build());
mViewPager.setAdapter(new ProjectsPagerAdapter(this, getSupportFragmentManager()));
mTabLayout.setupWithViewPager(mViewPager);
}
@Override
public GitLab getGitLab() {
return mGitLab;
}
@Override
public void onProjectClicked(Project project) {
Intent data = new Intent();
data.putExtra(EXTRA_PROJECT, Parcels.wrap(project));
setResult(RESULT_OK, data);
finish();
}
}
package com.commit451.gitlab.widget;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import com.bluelinelabs.logansquare.LoganSquare;
import com.commit451.gitlab.model.Account;
import java.io.IOException;
/**
* The prefs for the feed widget
*/
public class ProjectFeedWidgetPrefs {
public static String FILE_NAME = "LabCoatProjectWidgetPrefs";
private static final String KEY_ACCOUNT = "_account";
private static final String KEY_PROJECT_FEED_URL = "_feed_url";
private static SharedPreferences getSharedPrefs(Context context) {
return context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
}
@Nullable
public static Account getAccount(Context context, int widgetId) {
String accountsJson = getSharedPrefs(context).getString(widgetId + KEY_ACCOUNT, null);
if (!TextUtils.isEmpty(accountsJson)) {
try {
return LoganSquare.parse(accountsJson, Account.class);
} catch (IOException e) {
//why would this ever happen?!?!?1
getSharedPrefs(context).edit().remove(widgetId + KEY_ACCOUNT).commit();
}
}
return null;
}
public static void setAccount(Context context, int widgetId, Account account) {
try {
String json = LoganSquare.serialize(account);
getSharedPrefs(context)
.edit()
.putString(widgetId + KEY_ACCOUNT, json)
.commit();
} catch (IOException e) {
//this wont happen! Right?!?!?!
}
}
@Nullable
public static String getFeedUrl(Context context, int widgetId) {
return getSharedPrefs(context).getString(widgetId + KEY_PROJECT_FEED_URL, null);
}
public static void setFeedUrl(Context context, int widgetId, String url) {
getSharedPrefs(context)
.edit()
.putString(widgetId + KEY_PROJECT_FEED_URL, url)
.commit();
}
}
/*
* Copyright (C) 2011 The Android Open Source 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 com.commit451.gitlab.widget;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.widget.RemoteViews;
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.Account;
import com.commit451.gitlab.navigation.DeepLinker;
public class ProjectFeedWidgetProvider extends AppWidgetProvider {
public static final String ACTION_FOLLOW_LINK = "com.commit451.gitlab.ACTION_FOLLOW_LINK";
public static final String EXTRA_LINK = "com.commit451.gitlab.EXTRA_LINK";
@Override
public void onReceive(Context context, Intent intent) {
AppWidgetManager mgr = AppWidgetManager.getInstance(context);
if (intent.getAction().equals(ACTION_FOLLOW_LINK)) {
int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
String uri = intent.getStringExtra(EXTRA_LINK);
Intent launchIntent = DeepLinker.generateDeeplinkIntentFromUri(context, Uri.parse(uri));
launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(launchIntent);
}
super.onReceive(context, intent);
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
for (int widgetId : appWidgetIds) {
Account account = ProjectFeedWidgetPrefs.getAccount(context, widgetId);
String feedUrl = ProjectFeedWidgetPrefs.getFeedUrl(context, widgetId);
Intent intent = ProjectFeedWidgetService.newIntent(context, widgetId, account, feedUrl);
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout_entry);
rv.setRemoteAdapter(R.id.list_view, intent);
rv.setEmptyView(R.id.list_view, R.id.empty_view);
Intent toastIntent = new Intent(context, ProjectFeedWidgetProvider.class);
toastIntent.setAction(ProjectFeedWidgetProvider.ACTION_FOLLOW_LINK);
toastIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent toastPendingIntent = PendingIntent.getBroadcast(context, 0, toastIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
rv.setPendingIntentTemplate(R.id.list_view, toastPendingIntent);
appWidgetManager.updateAppWidget(widgetId, rv);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
}
\ No newline at end of file
Loading
Loading
@@ -16,15 +16,35 @@
 
package com.commit451.gitlab.widget;
 
import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViewsService;
 
import com.commit451.gitlab.model.Account;
import org.parceler.Parcels;
/**
* Service that basically just defers everything to a Factory. Yay!
*/
public class FeedWidgetService extends RemoteViewsService {
public class ProjectFeedWidgetService extends RemoteViewsService {
private static final String EXTRA_ACCOUNT = "account";
private static final String EXTRA_FEED_URL = "feed_url";
public static Intent newIntent(Context context, int widgetId, Account account, String feedUrl) {
Intent intent = new Intent(context, ProjectFeedWidgetService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
intent.putExtra(EXTRA_ACCOUNT, Parcels.wrap(account));
intent.putExtra(EXTRA_FEED_URL, feedUrl);
return intent;
}
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return new FeedRemoteViewsFactory(getApplicationContext(), intent);
Account account = Parcels.unwrap(intent.getParcelableExtra(EXTRA_ACCOUNT));
String feedUrl = intent.getStringExtra(EXTRA_FEED_URL);
return new FeedRemoteViewsFactory(getApplicationContext(), intent, account, feedUrl);
}
}
\ No newline at end of file
Loading
Loading
@@ -25,7 +25,7 @@ import timber.log.Timber;
/**
* The configuration screen for the ExampleAppWidgetProvider widget sample.
*/
public class FeedWidgetConfigureActivity extends BaseActivity {
public class UserFeedWidgetConfigureActivity extends BaseActivity {
 
int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
 
Loading
Loading
@@ -85,9 +85,9 @@ public class FeedWidgetConfigureActivity extends BaseActivity {
}
 
private void saveWidgetConfig(Account account) {
FeedWidgetPrefs.setAccount(FeedWidgetConfigureActivity.this, mAppWidgetId, account);
UserFeedWidgetPrefs.setAccount(UserFeedWidgetConfigureActivity.this, mAppWidgetId, account);
// Push widget update to surface with newly set prefix
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(FeedWidgetConfigureActivity.this);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(UserFeedWidgetConfigureActivity.this);
// ExampleAppWidgetProvider.updateAppWidget(context, appWidgetManager,
// mAppWidgetId, titlePrefix);
// Make sure we pass back the original appWidgetId
Loading
Loading
Loading
Loading
@@ -13,7 +13,7 @@ import java.io.IOException;
/**
* The prefs for the feed widget
*/
public class FeedWidgetPrefs {
public class UserFeedWidgetPrefs {
 
public static String FILE_NAME = "LabCoatWidgetPrefs";
 
Loading
Loading
Loading
Loading
@@ -25,9 +25,10 @@ import android.net.Uri;
import android.widget.RemoteViews;
 
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.Account;
import com.commit451.gitlab.navigation.DeepLinker;
 
public class FeedWidgetProvider extends AppWidgetProvider {
public class UserFeedWidgetProvider extends AppWidgetProvider {
public static final String ACTION_FOLLOW_LINK = "com.commit451.gitlab.ACTION_FOLLOW_LINK";
public static final String EXTRA_LINK = "com.commit451.gitlab.EXTRA_LINK";
 
Loading
Loading
@@ -51,8 +52,13 @@ public class FeedWidgetProvider extends AppWidgetProvider {
 
// Here we setup the intent which points to the StackViewService which will
// provide the views for this collection.
Intent intent = new Intent(context, FeedWidgetService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
Account account = UserFeedWidgetPrefs.getAccount(context, widgetId);
if (account == null || account.getUser().getFeedUrl() == null) {
//TODO alert the user to this misfortune?
return;
}
String feedUrl = account.getUser().getFeedUrl().toString();
Intent intent = ProjectFeedWidgetService.newIntent(context, widgetId, account, feedUrl);
// When intents are compared, the extras are ignored, so we need to embed the extras
// into the data so that the extras will not be ignored.
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
Loading
Loading
@@ -65,8 +71,8 @@ public class FeedWidgetProvider extends AppWidgetProvider {
// cannot setup their own pending intents, instead, the collection as a whole can
// setup a pending intent template, and the individual items can set a fillInIntent
// to create unique before on an item to item basis.
Intent toastIntent = new Intent(context, FeedWidgetProvider.class);
toastIntent.setAction(FeedWidgetProvider.ACTION_FOLLOW_LINK);
Intent toastIntent = new Intent(context, UserFeedWidgetProvider.class);
toastIntent.setAction(UserFeedWidgetProvider.ACTION_FOLLOW_LINK);
toastIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent toastPendingIntent = PendingIntent.getBroadcast(context, 0, toastIntent,
Loading
Loading
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_content_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.design.widget.CoordinatorLayout>
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="256dp"
android:minHeight="128dp"
android:updatePeriodMillis="5400000"
android:previewImage="@mipmap/ic_launcher"
android:initialLayout="@layout/widget_layout_entry"
android:resizeMode="horizontal|vertical"
android:configure="com.commit451.gitlab.widget.ProjectFeedWidgetConfigureActivity"
android:widgetCategory="home_screen"/>
\ No newline at end of file
Loading
Loading
@@ -7,5 +7,5 @@
android:previewImage="@mipmap/ic_launcher"
android:initialLayout="@layout/widget_layout_entry"
android:resizeMode="horizontal|vertical"
android:configure="com.commit451.gitlab.widget.FeedWidgetConfigureActivity"
android:configure="com.commit451.gitlab.widget.UserFeedWidgetConfigureActivity"
android:widgetCategory="home_screen"/>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment