From d6fb37f40a36c50a2bdae7c1dd809297c9f6e5bd Mon Sep 17 00:00:00 2001 From: Habib Ridho Date: Sun, 28 May 2017 20:17:29 +0700 Subject: [PATCH 1/3] revenue data based on logged in user --- .../model/BukaAnalyticsSqliteOpenHelper.java | 15 +++++++ js-src/lib/BLApi.js | 8 ++-- js-src/lib/BLSqlite.js | 43 +++++++++++++++++++ js-src/redux/dashboard/actions.js | 4 ++ js-src/redux/user/actions.js | 6 +++ 5 files changed, 72 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/github/bukaanalytics/common/model/BukaAnalyticsSqliteOpenHelper.java b/app/src/main/java/com/github/bukaanalytics/common/model/BukaAnalyticsSqliteOpenHelper.java index 6d11d0f..b3d4220 100644 --- a/app/src/main/java/com/github/bukaanalytics/common/model/BukaAnalyticsSqliteOpenHelper.java +++ b/app/src/main/java/com/github/bukaanalytics/common/model/BukaAnalyticsSqliteOpenHelper.java @@ -33,6 +33,7 @@ public class BukaAnalyticsSqliteOpenHelper extends SQLiteOpenHelper { private static final String TABLE_USERS = "users"; private static final String TABLE_PRODUCTS = "products"; private static final String TABLE_STATS = "stats"; + private static final String TABLE_TOKENS = "tokens"; //User Table Columns private static final String KEY_USER_ID = "seller_id"; @@ -64,6 +65,11 @@ public class BukaAnalyticsSqliteOpenHelper extends SQLiteOpenHelper { private static final String KEY_STAT_MARKETINTERESTCOUNT = "market_interest_count"; private static final String KEY_STAT_MARKETINTERESTTOTAL = "market_interest_total"; + // Tokens Table Columns + private static final String KEY_TOKEN_ID = "id"; + private static final String KEY_TOKEN_USER_ID = "user_id"; + private static final String KEY_TOKEN_TOKEN = "token"; + private static final String MLAB_API_KEY = "8wDpSrJX4XU4tX_ff56Y39I98Tnn4xb0"; // Instance @@ -114,9 +120,17 @@ public void onCreate(SQLiteDatabase db) { "FOREIGN KEY("+KEY_STAT_PRODUCTID+") REFERENCES "+TABLE_PRODUCTS+"("+KEY_PRODUCT_ID+")"+ ")"; + String CREATE_TOKENS_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_TOKENS + + "(" + + KEY_TOKEN_ID + " INTEGER PRIMARY KEY," + + KEY_TOKEN_USER_ID + " INTEGER," + + KEY_TOKEN_TOKEN + " TEXT" + + ")"; + db.execSQL(CREATE_USERS_TABLE); db.execSQL(CREATE_PRODUCTS_TABLE); db.execSQL(CREATE_STAT_TABLE); + db.execSQL(CREATE_TOKENS_TABLE); } @Override @@ -126,6 +140,7 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_USERS); db.execSQL("DROP TABLE IF EXISTS " + TABLE_PRODUCTS); db.execSQL("DROP TABLE IF EXISTS " + TABLE_STATS); + db.execSQL("DROP TABLE IF EXISTS " + TABLE_TOKENS); onCreate(db); } } diff --git a/js-src/lib/BLApi.js b/js-src/lib/BLApi.js index 7fe36a0..232c723 100644 --- a/js-src/lib/BLApi.js +++ b/js-src/lib/BLApi.js @@ -45,14 +45,14 @@ class BLApi { } static getTransactions(params, successCallback, errorCallback) { - let { perPage, page, since } = params + let { userId, token, perPage, page, since } = params return this.sendApiRequest({ method: 'get', url: 'https://api.bukalapak.com/v2/transactions.json', auth: { - username: '6214450', - password: 'I1vy09dhNuWx3G0CGiN' + username: userId, + password: token }, params: { page: page, @@ -66,7 +66,7 @@ class BLApi { if (resData.transactions.length == perPage) { let newParam = { - perPage, since, + userId, token, perPage, since, page: page+1 } this.getTransactions(newParam, successCallback, errorCallback) diff --git a/js-src/lib/BLSqlite.js b/js-src/lib/BLSqlite.js index ffc5c10..7b4d663 100644 --- a/js-src/lib/BLSqlite.js +++ b/js-src/lib/BLSqlite.js @@ -7,6 +7,7 @@ const config = { users: 'users', products: 'products', stats: 'stats', + tokens: 'tokens' }, col: { users: { @@ -31,6 +32,11 @@ const config = { interest_count: 'interest_count', interest_total: 'interest_total', }, + tokens: { + id: 'id', + user_id: 'user_id', + token: 'token' + } }, }; @@ -164,6 +170,16 @@ class BLSqlite { }); } + getActiveToken(callback) { + this.db.executeSql(` + SELECT * from tokens + ORDER BY id DESC + LIMIT 1 + `, [], result => { + callback(this.parseActiveToken(result)) + }) + } + createTablesIfNotExists() { this.db.executeSql(` CREATE TABLE IF NOT EXISTS users ( @@ -191,6 +207,12 @@ class BLSqlite { interest_count INTEGER, interest_total INTEGER )`); + this.db.executeSql(` + CREATE TABLE IF NOT EXISTS tokens( + id INTEGER PRIMARY KEY, + user_id INTEGER, + token TEXT + )`); } insertUser(param) { @@ -228,6 +250,16 @@ class BLSqlite { ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) `, [param.date, param.day_name, param.product_id, param.view_count, param.view_total, param.sold_count, param.sold_total, param.interest_count, param.interest_total]); } + + insertToken(param) { + this.db.executeSql(` + INSERT INTO ${config.tables.tokens} ( + ${config.col.tokens.user_id}, + ${config.col.tokens.token} + ) VALUES (?, ?) + `, [param.userId, param.token]); + } + // ================== // Private Functions // ================== @@ -291,6 +323,17 @@ class BLSqlite { return retval; } + parseActiveToken(result) { + const retval = {} + const result_length = results.rows.length; + for (let i = 0; i < result_length; i++) { + const row = results.rows.item(i); + retval.userId = row.user_id; + retval.token = row.token; + } + return retval; + } + } export const Sqlite = new BLSqlite(); diff --git a/js-src/redux/dashboard/actions.js b/js-src/redux/dashboard/actions.js index 8bed765..06c9afc 100644 --- a/js-src/redux/dashboard/actions.js +++ b/js-src/redux/dashboard/actions.js @@ -32,7 +32,11 @@ export function refreshData(refreshType) { dispatch(getSqliteData(latestDate)); console.log(Sqlite); + let userData = getState().user + return BLApi.getTransactions({ + userId: userData.userId, + token: userData.token, perPage: perPage, page: 1, since: since diff --git a/js-src/redux/user/actions.js b/js-src/redux/user/actions.js index 0c1c8e2..1474c2d 100644 --- a/js-src/redux/user/actions.js +++ b/js-src/redux/user/actions.js @@ -1,4 +1,5 @@ import BLApi from '@lib/BLApi' +import { Sqlite } from '@lib/BLSqlite'; // User action types export const USER = { @@ -24,6 +25,11 @@ function isLoading() { } function loginSuccess(data) { + Sqlite.insertToken({ + userId: data.user_id, + token: data.token + }) + return { type: USER.LOGIN_SUCCESS, payload: { From 047a879cb6b0ad2febb0c0568ea5e6f9b9bae31b Mon Sep 17 00:00:00 2001 From: Habib Ridho Date: Sun, 28 May 2017 20:52:51 +0700 Subject: [PATCH 2/3] fetch widget data based on logged in user --- .../common/HTTPRequestHelper.java | 6 ++++- .../model/BukaAnalyticsSqliteOpenHelper.java | 26 +++++++++++++++++++ .../bukaanalytics/common/model/Token.java | 17 ++++++++++++ .../BukaAnalyticsAppWidgetProvider.java | 21 +++++++++++---- app/src/main/res/layout/widget.xml | 13 +++++++++- 5 files changed, 76 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/com/github/bukaanalytics/common/model/Token.java diff --git a/app/src/main/java/com/github/bukaanalytics/common/HTTPRequestHelper.java b/app/src/main/java/com/github/bukaanalytics/common/HTTPRequestHelper.java index cbdd9a0..86facb9 100644 --- a/app/src/main/java/com/github/bukaanalytics/common/HTTPRequestHelper.java +++ b/app/src/main/java/com/github/bukaanalytics/common/HTTPRequestHelper.java @@ -4,8 +4,10 @@ import android.util.Base64; import android.util.Log; +import com.github.bukaanalytics.common.model.BukaAnalyticsSqliteOpenHelper; import com.github.bukaanalytics.common.model.Product; import com.github.bukaanalytics.common.model.Stat; +import com.github.bukaanalytics.common.model.Token; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.koushikdutta.async.future.FutureCallback; @@ -70,7 +72,9 @@ public void getAsJSONObject(String URL, final Context context, final JSONObjectC this.jsonObjectCallback = callback; // ini perlu di refactor - String appended = "32856476:9RQ3MbQlP4Fac16iv4e"; + final BukaAnalyticsSqliteOpenHelper db = BukaAnalyticsSqliteOpenHelper.getInstance(context.getApplicationContext()); + Token tokenData = db.getTokenData(); + String appended = String.valueOf(tokenData.user_id) + ":" + tokenData.token; String auth= Base64.encodeToString(appended.getBytes(), Base64.NO_WRAP); Ion.with(context) diff --git a/app/src/main/java/com/github/bukaanalytics/common/model/BukaAnalyticsSqliteOpenHelper.java b/app/src/main/java/com/github/bukaanalytics/common/model/BukaAnalyticsSqliteOpenHelper.java index b3d4220..b7ed7b7 100644 --- a/app/src/main/java/com/github/bukaanalytics/common/model/BukaAnalyticsSqliteOpenHelper.java +++ b/app/src/main/java/com/github/bukaanalytics/common/model/BukaAnalyticsSqliteOpenHelper.java @@ -288,6 +288,31 @@ public List getProducts(int userId) { return products; } + public Token getTokenData() { + Token tokenData = new Token(0,0,""); + String GET_ACTIVE_TOKEN = String.format("SELECT * FROM %s ORDER BY %s DESC LIMIT 1", TABLE_TOKENS, KEY_TOKEN_ID); + + SQLiteDatabase db = getReadableDatabase(); + Cursor cursor = db.rawQuery(GET_ACTIVE_TOKEN, null); + try{ + if (cursor != null && cursor.getCount() > 0) { + if (cursor.moveToFirst()) { + tokenData = new Token(cursor.getInt(cursor.getColumnIndex(KEY_TOKEN_ID)), + cursor.getInt(cursor.getColumnIndex(KEY_TOKEN_USER_ID)), + cursor.getString(cursor.getColumnIndex(KEY_TOKEN_TOKEN))); + } + } + } catch (Exception e) { + Log.d(TAG, "getTokenData() Error: " + e.getMessage()); + } finally { + if (cursor != null && !cursor.isClosed()) { + cursor.close(); + } + } + + return tokenData; + } + public List getStats(String productId) { List stats = new ArrayList<>(); @@ -436,4 +461,5 @@ public ArrayList getData(String Query){ return alc; } } + } diff --git a/app/src/main/java/com/github/bukaanalytics/common/model/Token.java b/app/src/main/java/com/github/bukaanalytics/common/model/Token.java new file mode 100644 index 0000000..6b161f3 --- /dev/null +++ b/app/src/main/java/com/github/bukaanalytics/common/model/Token.java @@ -0,0 +1,17 @@ +package com.github.bukaanalytics.common.model; + +/** + * Created by habibridho on 5/28/17. + */ + +public class Token { + public int id; + public int user_id; + public String token; + + public Token(int _id, int _user_id, String _token) { + id = _id; + user_id = _user_id; + token = _token; + } +} diff --git a/app/src/main/java/com/github/bukaanalytics/widget/BukaAnalyticsAppWidgetProvider.java b/app/src/main/java/com/github/bukaanalytics/widget/BukaAnalyticsAppWidgetProvider.java index 5305abc..a2b3737 100644 --- a/app/src/main/java/com/github/bukaanalytics/widget/BukaAnalyticsAppWidgetProvider.java +++ b/app/src/main/java/com/github/bukaanalytics/widget/BukaAnalyticsAppWidgetProvider.java @@ -6,10 +6,13 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; +import android.view.View; import android.widget.RemoteViews; import com.github.bukaanalytics.R; import com.github.bukaanalytics.common.HTTPRequestHelper; +import com.github.bukaanalytics.common.model.BukaAnalyticsSqliteOpenHelper; +import com.github.bukaanalytics.common.model.Token; import com.github.bukaanalytics.widget.widgetalarm.WidgetAlarm; import com.google.gson.JsonArray; import com.google.gson.JsonObject; @@ -29,17 +32,25 @@ public class BukaAnalyticsAppWidgetProvider extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { + final BukaAnalyticsSqliteOpenHelper db = BukaAnalyticsSqliteOpenHelper.getInstance(context.getApplicationContext()); final int count = appWidgetIds.length; - int newOrder = 0; for (int i = 0; i < count; i++) { int widgetId = appWidgetIds[i]; RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget); - getUnread(context, appWidgetManager, remoteViews, widgetId); - getNotifByType("report", context, appWidgetManager, remoteViews, widgetId); - getNotifByType("nego", context, appWidgetManager, remoteViews, widgetId); + Token tokenData = db.getTokenData(); + if (tokenData.id == 0) { + remoteViews.setViewVisibility(R.id.textView_not_login, View.VISIBLE); + remoteViews.setViewVisibility(R.id.layout_stat, View.INVISIBLE); + } else { + remoteViews.setViewVisibility(R.id.textView_not_login, View.INVISIBLE); + remoteViews.setViewVisibility(R.id.layout_stat, View.VISIBLE); + getUnread(context, appWidgetManager, remoteViews, widgetId); + getNotifByType("report", context, appWidgetManager, remoteViews, widgetId); + getNotifByType("nego", context, appWidgetManager, remoteViews, widgetId); + } Intent intent = new Intent(context, BukaAnalyticsAppWidgetProvider.class); intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); @@ -48,7 +59,7 @@ public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] a PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); -// appWidgetManager.updateAppWidget(widgetId, remoteViews); + appWidgetManager.updateAppWidget(widgetId, remoteViews); } } diff --git a/app/src/main/res/layout/widget.xml b/app/src/main/res/layout/widget.xml index ac669cd..73595bf 100644 --- a/app/src/main/res/layout/widget.xml +++ b/app/src/main/res/layout/widget.xml @@ -11,16 +11,27 @@ android:id="@+id/textView_header_widget" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="16dp" android:padding="2dp" android:textSize="20sp" android:textColor="#FFFFFF" android:text="BukaAnalytics" android:textStyle="bold"/> + + From 47c0c42414cd89a11d36fe547aa029868ae44804 Mon Sep 17 00:00:00 2001 From: Habib Ridho Date: Sun, 28 May 2017 20:59:04 +0700 Subject: [PATCH 3/3] implement tap to refresh widget data --- .../bukaanalytics/widget/BukaAnalyticsAppWidgetProvider.java | 5 +++-- app/src/main/res/layout/widget.xml | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/github/bukaanalytics/widget/BukaAnalyticsAppWidgetProvider.java b/app/src/main/java/com/github/bukaanalytics/widget/BukaAnalyticsAppWidgetProvider.java index a2b3737..fe6de8d 100644 --- a/app/src/main/java/com/github/bukaanalytics/widget/BukaAnalyticsAppWidgetProvider.java +++ b/app/src/main/java/com/github/bukaanalytics/widget/BukaAnalyticsAppWidgetProvider.java @@ -43,9 +43,9 @@ public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] a Token tokenData = db.getTokenData(); if (tokenData.id == 0) { remoteViews.setViewVisibility(R.id.textView_not_login, View.VISIBLE); - remoteViews.setViewVisibility(R.id.layout_stat, View.INVISIBLE); + remoteViews.setViewVisibility(R.id.layout_stat, View.GONE); } else { - remoteViews.setViewVisibility(R.id.textView_not_login, View.INVISIBLE); + remoteViews.setViewVisibility(R.id.textView_not_login, View.GONE); remoteViews.setViewVisibility(R.id.layout_stat, View.VISIBLE); getUnread(context, appWidgetManager, remoteViews, widgetId); getNotifByType("report", context, appWidgetManager, remoteViews, widgetId); @@ -58,6 +58,7 @@ public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] a PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); + remoteViews.setOnClickPendingIntent(R.id.layout_container, pendingIntent); appWidgetManager.updateAppWidget(widgetId, remoteViews); } diff --git a/app/src/main/res/layout/widget.xml b/app/src/main/res/layout/widget.xml index 73595bf..0b7b6d5 100644 --- a/app/src/main/res/layout/widget.xml +++ b/app/src/main/res/layout/widget.xml @@ -1,6 +1,7 @@