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
Pipeline #
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