From 604403f4c04ae3cd38643ed7cea2b52ff7e74d0c Mon Sep 17 00:00:00 2001 From: Anirudh S Date: Tue, 11 Aug 2015 16:15:09 +0530 Subject: [PATCH 01/12] Upgrade appcompat-v7 to 22.2.1 --- HelpStackExample/build.gradle | 2 +- helpstack/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/HelpStackExample/build.gradle b/HelpStackExample/build.gradle index 47317b9..e86c637 100644 --- a/HelpStackExample/build.gradle +++ b/HelpStackExample/build.gradle @@ -4,7 +4,7 @@ dependencies { compile fileTree(dir: 'libs', include: '*.jar') compile project(':helpstack') - compile 'com.android.support:appcompat-v7:22.2.0' + compile 'com.android.support:appcompat-v7:22.2.1' } android { diff --git a/helpstack/build.gradle b/helpstack/build.gradle index cf16fd9..e66763f 100644 --- a/helpstack/build.gradle +++ b/helpstack/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'maven' dependencies { compile fileTree(dir: 'libs', include: '*.jar') - compile 'com.android.support:appcompat-v7:22.2.0' + compile 'com.android.support:appcompat-v7:22.2.1' compile 'com.google.code.gson:gson:2.3' From c422c9ebce0431c9a70d7d12e32673b358b0d5dd Mon Sep 17 00:00:00 2001 From: Anirudh S Date: Tue, 18 Aug 2015 16:27:07 +0530 Subject: [PATCH 02/12] Code cleanup --- HelpStackExample/AndroidManifest.xml | 4 +- HelpStackExample/res/values-v14/styles.xml | 3 +- .../helpstackexample/HSApplication.java | 21 +-- .../helpstackexample/MainActivity.java | 16 +- helpstack/AndroidManifest.xml | 2 +- .../layout/hs_activity_edit_attachment.xml | 2 +- helpstack/res/values/hs_strings.xml | 9 +- .../com/tenmiles/helpstack/HSHelpStack.java | 7 +- .../helpstack/activities/ArticleActivity.java | 9 - .../activities/EditAttachmentActivity.java | 74 ++++---- .../activities/HSActivityManager.java | 5 +- .../activities/HSActivityParent.java | 11 +- .../helpstack/activities/HomeActivity.java | 7 +- .../ImageAttachmentDisplayActivity.java | 9 +- .../activities/IssueDetailActivity.java | 14 +- .../activities/NewIssueActivity.java | 12 +- .../helpstack/activities/NewUserActivity.java | 12 +- .../helpstack/activities/SectionActivity.java | 11 +- .../helpstack/fragments/ArticleFragment.java | 4 +- .../fragments/HSFragmentManager.java | 23 +-- .../helpstack/fragments/HSFragmentParent.java | 4 +- .../helpstack/fragments/HomeFragment.java | 74 ++------ .../ImageAttachmentDisplayFragment.java | 39 ++--- .../fragments/IssueDetailFragment.java | 161 ++++++++---------- .../helpstack/fragments/NewIssueFragment.java | 68 ++++---- .../helpstack/fragments/NewUserFragment.java | 22 +-- .../helpstack/fragments/SearchFragment.java | 44 ++--- .../helpstack/fragments/SectionFragment.java | 43 ++--- .../tenmiles/helpstack/gears/HSDeskGear.java | 72 ++------ .../tenmiles/helpstack/gears/HSEmailGear.java | 3 +- .../helpstack/gears/HSHappyfoxGear.java | 72 +++----- .../helpstack/gears/HSZendeskGear.java | 25 +-- .../helper/HSBaseExpandableListAdapter.java | 55 +++--- .../helpstack/logic/HSArticleReader.java | 63 ++++--- .../com/tenmiles/helpstack/logic/HSGear.java | 15 +- .../tenmiles/helpstack/logic/HSSource.java | 113 +++++------- .../helpstack/logic/HSTestDataGear.java | 34 ++-- .../com/tenmiles/helpstack/logic/HSUtils.java | 26 ++- .../logic/OnFetchedArraySuccessListener.java | 5 +- .../logic/OnFetchedSuccessListener.java | 3 +- .../OnNewTicketFetchedSuccessListener.java | 3 +- .../helpstack/model/HSAttachment.java | 15 +- .../helpstack/model/HSCachedTicket.java | 5 +- .../helpstack/model/HSCachedUser.java | 4 +- .../com/tenmiles/helpstack/model/HSDraft.java | 2 +- .../tenmiles/helpstack/model/HSKBItem.java | 4 +- .../tenmiles/helpstack/model/HSTicket.java | 4 +- .../helpstack/model/HSTicketUpdate.java | 22 +-- .../helpstack/model/HSUploadAttachment.java | 20 ++- .../com/tenmiles/helpstack/model/HSUser.java | 20 +-- .../service/AttachmentDownloadReceiver.java | 38 ++--- .../service/DownloadAttachmentUtility.java | 23 ++- .../{activities => widget}/DrawingView.java | 4 +- .../widget/HSExpandableListView.java | 6 +- 54 files changed, 511 insertions(+), 855 deletions(-) rename helpstack/src/com/tenmiles/helpstack/{activities => widget}/DrawingView.java (98%) rename helpstack/src/com/tenmiles/helpstack/{theme => }/widget/HSExpandableListView.java (98%) diff --git a/HelpStackExample/AndroidManifest.xml b/HelpStackExample/AndroidManifest.xml index 716ab84..1a5a61f 100644 --- a/HelpStackExample/AndroidManifest.xml +++ b/HelpStackExample/AndroidManifest.xml @@ -1,12 +1,11 @@ @@ -22,7 +21,6 @@ android:label="@string/app_name" > - diff --git a/HelpStackExample/res/values-v14/styles.xml b/HelpStackExample/res/values-v14/styles.xml index 0bb798b..87a9c47 100644 --- a/HelpStackExample/res/values-v14/styles.xml +++ b/HelpStackExample/res/values-v14/styles.xml @@ -10,8 +10,7 @@ - diff --git a/HelpStackExample/src/com/example/helpstackexample/HSApplication.java b/HelpStackExample/src/com/example/helpstackexample/HSApplication.java index bb80726..2899f82 100644 --- a/HelpStackExample/src/com/example/helpstackexample/HSApplication.java +++ b/HelpStackExample/src/com/example/helpstackexample/HSApplication.java @@ -4,11 +4,8 @@ import com.tenmiles.helpstack.HSHelpStack; import com.tenmiles.helpstack.gears.HSEmailGear; -import com.tenmiles.helpstack.gears.HSZendeskGear; - - -public class HSApplication extends Application{ +public class HSApplication extends Application { HSHelpStack helpStack; @@ -18,16 +15,16 @@ public void onCreate() { helpStack = HSHelpStack.getInstance(this); - HSEmailGear emailGear = new HSEmailGear( "example@happyfox.com",R.xml.articles); + HSEmailGear emailGear = new HSEmailGear("foo@bar.com", R.xml.articles); helpStack.setGear(emailGear); - - /* Uncomment the following to use the Happyfox gear with appropriate support email address */ - // HSHappyfoxGear happyfoxGear = new HSHappyfoxGear("https://example.happyfox.com", - // "", - // "", - // "", ""); + /* Uncomment the following to use the HappyFox gear with appropriate support email address */ + // HSHappyfoxGear happyfoxGear = new HSHappyfoxGear( + // "https://example.happyfox.com", + // "", + // "", + // "", + // ""); // helpStack.setGear(happyfoxGear); - } } diff --git a/HelpStackExample/src/com/example/helpstackexample/MainActivity.java b/HelpStackExample/src/com/example/helpstackexample/MainActivity.java index aa320a3..18397d0 100644 --- a/HelpStackExample/src/com/example/helpstackexample/MainActivity.java +++ b/HelpStackExample/src/com/example/helpstackexample/MainActivity.java @@ -22,8 +22,7 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_main); if (savedInstanceState == null) { - getSupportFragmentManager().beginTransaction() - .add(R.id.container, new PlaceholderFragment()).commit(); + getSupportFragmentManager().beginTransaction().add(R.id.container, new PlaceholderFragment()).commit(); } getSupportActionBar().setDisplayHomeAsUpEnabled(false); @@ -33,25 +32,18 @@ protected void onCreate(Bundle savedInstanceState) { @Override public boolean onCreateOptionsMenu(Menu menu) { - - // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } - - /** * A placeholder fragment containing a simple view. @@ -62,10 +54,8 @@ public PlaceholderFragment() { } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - View rootView = inflater.inflate(R.layout.fragment_main, container, - false); + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.fragment_main, container, false); rootView.findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override diff --git a/helpstack/AndroidManifest.xml b/helpstack/AndroidManifest.xml index 787a734..8fee5f6 100644 --- a/helpstack/AndroidManifest.xml +++ b/helpstack/AndroidManifest.xml @@ -5,7 +5,7 @@ android:versionName="1.0" > diff --git a/helpstack/res/layout/hs_activity_edit_attachment.xml b/helpstack/res/layout/hs_activity_edit_attachment.xml index 69adbd0..a163318 100644 --- a/helpstack/res/layout/hs_activity_edit_attachment.xml +++ b/helpstack/res/layout/hs_activity_edit_attachment.xml @@ -6,7 +6,7 @@ android:orientation="vertical" tools:context=".MainActivity" > - Please enter your contact details to reach you - Your issue has been created and raised. + Your issue has been created and raised Report Issue Subject Message @@ -57,8 +57,8 @@ Download Downloading Attachment Download complete - Loading... - You will be notified when the download finishes. + Loading… + You will be notified when the download finishes Open with @@ -76,4 +76,7 @@ Error in reporting issue Subject and message cannot be empty + Drawing saved to Gallery + Image could not be saved + diff --git a/helpstack/src/com/tenmiles/helpstack/HSHelpStack.java b/helpstack/src/com/tenmiles/helpstack/HSHelpStack.java index dd5bf86..451c240 100644 --- a/helpstack/src/com/tenmiles/helpstack/HSHelpStack.java +++ b/helpstack/src/com/tenmiles/helpstack/HSHelpStack.java @@ -50,13 +50,10 @@ public class HSHelpStack { public static HSHelpStack getInstance(Context context) { if (singletonInstance == null) { synchronized (HSHelpStack.class) { // 1 - if (singletonInstance == null) // 2 - { + if (singletonInstance == null) { // 2 Log.d(TAG, "New Instance"); - singletonInstance = new HSHelpStack( - context.getApplicationContext()); // 3 + singletonInstance = new HSHelpStack(context.getApplicationContext()); // 3 } - } } return singletonInstance; diff --git a/helpstack/src/com/tenmiles/helpstack/activities/ArticleActivity.java b/helpstack/src/com/tenmiles/helpstack/activities/ArticleActivity.java index 40ddc01..4b4ce07 100644 --- a/helpstack/src/com/tenmiles/helpstack/activities/ArticleActivity.java +++ b/helpstack/src/com/tenmiles/helpstack/activities/ArticleActivity.java @@ -36,36 +36,27 @@ public class ArticleActivity extends HSActivityParent { public static final String EXTRAS_ARTICLE_ITEM = "item"; - - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.hs_activity_article); if (savedInstanceState == null) { - HSKBItem kbItem = (HSKBItem)getIntent().getSerializableExtra("item"); ArticleFragment sectionFragment = HSFragmentManager.getArticleFragment(this, kbItem); HSFragmentManager.putFragmentInActivity(this, R.id.container, sectionFragment, "Article"); getHelpStackActionBar().setTitle(R.string.hs_article); - } } @Override public boolean onCreateOptionsMenu(Menu menu) { - - // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.hs_article, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == android.R.id.home) { finish(); diff --git a/helpstack/src/com/tenmiles/helpstack/activities/EditAttachmentActivity.java b/helpstack/src/com/tenmiles/helpstack/activities/EditAttachmentActivity.java index 8dbab90..66a844d 100644 --- a/helpstack/src/com/tenmiles/helpstack/activities/EditAttachmentActivity.java +++ b/helpstack/src/com/tenmiles/helpstack/activities/EditAttachmentActivity.java @@ -44,6 +44,7 @@ import com.tenmiles.helpstack.R; import com.tenmiles.helpstack.model.HSAttachment; +import com.tenmiles.helpstack.theme.widget.DrawingView; import java.io.FileNotFoundException; import java.util.UUID; @@ -99,7 +100,6 @@ public void onClick(View view) { @Override public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu items for use in the action bar MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.hs_edit_attachment, menu); return super.onCreateOptionsMenu(menu); @@ -128,36 +128,40 @@ public void onBackPressed() { public void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); - switch(requestCode) { - case REQUEST_CODE_PHOTO_PICKER: - if(resultCode == Activity.RESULT_OK){ - Uri selectedImage = intent.getData(); + if(requestCode == REQUEST_CODE_PHOTO_PICKER) { + if(resultCode == Activity.RESULT_OK) { + Uri selectedImage = intent.getData(); - Cursor cursor = this.getContentResolver().query(selectedImage, new String[] { + Cursor cursor = this.getContentResolver().query(selectedImage, + new String[] { MediaStore.Images.ImageColumns.DATA, MediaStore.Images.ImageColumns.DISPLAY_NAME, - MediaStore.Images.ImageColumns.MIME_TYPE }, null, null, null); + MediaStore.Images.ImageColumns.MIME_TYPE + }, null, null, null); + + if (cursor != null) { cursor.moveToFirst(); + } - String display_name = cursor.getString(cursor.getColumnIndex(MediaStore.Images.ImageColumns.DISPLAY_NAME)); - String mime_type = cursor.getString(cursor.getColumnIndex(MediaStore.Images.ImageColumns.MIME_TYPE)); + String display_name = cursor.getString(cursor.getColumnIndex(MediaStore.Images.ImageColumns.DISPLAY_NAME)); + String mime_type = cursor.getString(cursor.getColumnIndex(MediaStore.Images.ImageColumns.MIME_TYPE)); - cursor.close(); + cursor.close(); - selectedAttachment = HSAttachment.createAttachment(selectedImage.toString(), display_name, mime_type); + selectedAttachment = HSAttachment.createAttachment(selectedImage.toString(), display_name, mime_type); - try { - Uri uri = Uri.parse(selectedAttachment.getUrl()); - originalBitmap = BitmapFactory.decodeStream(this.getContentResolver().openInputStream(uri), null, null); - drawView.setCanvasBitmap(originalBitmap); - } catch (FileNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - else { - finish(); + try { + Uri uri = Uri.parse(selectedAttachment.getUrl()); + originalBitmap = BitmapFactory.decodeStream(this.getContentResolver().openInputStream(uri), null, null); + drawView.setCanvasBitmap(originalBitmap); + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); } + } + else { + finish(); + } } } @@ -176,8 +180,7 @@ private void onSaveClick() { } if(imageSaved!=null){ - Toast savedToast = Toast.makeText(getApplicationContext(), - "Drawing saved to Gallery!", Toast.LENGTH_SHORT); + Toast savedToast = Toast.makeText(getApplicationContext(), R.string.drawing_saved, Toast.LENGTH_SHORT); savedToast.show(); Intent resultIntent = new Intent(); @@ -187,8 +190,7 @@ private void onSaveClick() { finish(); } else{ - Toast unsavedToast = Toast.makeText(getApplicationContext(), - "Oops! Image could not be saved.", Toast.LENGTH_SHORT); + Toast unsavedToast = Toast.makeText(getApplicationContext(), R.string.image_not_saved, Toast.LENGTH_SHORT); unsavedToast.show(); } @@ -217,16 +219,16 @@ public void paintColorClicked(View view) { private void discardDraft() { if (drawView.hasBeenEdited()) { new AlertDialog.Builder(this) - .setTitle(R.string.discard) - .setMessage("Do you want to discard your changes?") - .setNegativeButton(android.R.string.no, null) - .setPositiveButton(R.string.discard, new DialogInterface.OnClickListener() { - - public void onClick(DialogInterface arg0, int arg1) { - EditAttachmentActivity.super.onBackPressed(); - } - } - ).create().show(); + .setTitle(R.string.discard) + .setMessage("Do you want to discard your changes?") + .setNegativeButton(android.R.string.no, null) + .setPositiveButton(R.string.discard, new DialogInterface.OnClickListener() { + + public void onClick(DialogInterface arg0, int arg1) { + EditAttachmentActivity.super.onBackPressed(); + } + } + ).create().show(); } else { HSActivityManager.finishSafe(this); diff --git a/helpstack/src/com/tenmiles/helpstack/activities/HSActivityManager.java b/helpstack/src/com/tenmiles/helpstack/activities/HSActivityManager.java index 98879a2..6812d2d 100644 --- a/helpstack/src/com/tenmiles/helpstack/activities/HSActivityManager.java +++ b/helpstack/src/com/tenmiles/helpstack/activities/HSActivityManager.java @@ -74,6 +74,7 @@ public static void startNewUserActivity(HSFragmentParent context, int requestCod Intent intent = new Intent(context.getActivity(), NewUserActivity.class); intent.putExtra(NewIssueActivity.EXTRAS_SUBJECT, subject); intent.putExtra(NewIssueActivity.EXTRAS_MESSAGE, message); + if (attachmentArray != null) { Gson json = new Gson(); intent.putExtra(NewIssueActivity.EXTRAS_ATTACHMENT, json.toJson(attachmentArray)); @@ -97,12 +98,12 @@ public static void startImageAttachmentDisplayActivity(Activity context, String public static void finishSafe(Activity context) { Intent intent = new Intent(); - context.setResult(HSActivityManager.resultCode_cancelled,intent); + context.setResult(HSActivityManager.resultCode_cancelled, intent); context.finish(); } public static void sendSuccessSignal(Activity context, Intent result) { - context.setResult(HSActivityManager.resultCode_sucess,result); + context.setResult(HSActivityManager.resultCode_sucess, result); context.finish(); } } diff --git a/helpstack/src/com/tenmiles/helpstack/activities/HSActivityParent.java b/helpstack/src/com/tenmiles/helpstack/activities/HSActivityParent.java index 3be8e07..7ed26af 100644 --- a/helpstack/src/com/tenmiles/helpstack/activities/HSActivityParent.java +++ b/helpstack/src/com/tenmiles/helpstack/activities/HSActivityParent.java @@ -22,8 +22,6 @@ package com.tenmiles.helpstack.activities; -import com.tenmiles.helpstack.R; - import android.os.Bundle; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; @@ -36,14 +34,17 @@ * */ public class HSActivityParent extends AppCompatActivity { + + private static final String ACTION_BAR_TITLE = "Actionbar_title"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); - // Handling actionbar title when activity changes so activity doesnot have to handle it. + // Handling actionbar title when activity changes so activity does not have to handle it. if (savedInstanceState != null) { - getHelpStackActionBar().setTitle(savedInstanceState.getString("Actionbar_title")); + + getHelpStackActionBar().setTitle(savedInstanceState.getString(ACTION_BAR_TITLE)); } getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true); @@ -57,7 +58,7 @@ public void configureActionBar(ActionBar actionBar) { @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); - outState.putString("Actionbar_title", getHelpStackActionBar().getTitle().toString()); + outState.putString(ACTION_BAR_TITLE, getHelpStackActionBar().getTitle().toString()); } public ActionBar getHelpStackActionBar() { diff --git a/helpstack/src/com/tenmiles/helpstack/activities/HomeActivity.java b/helpstack/src/com/tenmiles/helpstack/activities/HomeActivity.java index c9e4c43..1ead094 100644 --- a/helpstack/src/com/tenmiles/helpstack/activities/HomeActivity.java +++ b/helpstack/src/com/tenmiles/helpstack/activities/HomeActivity.java @@ -39,8 +39,7 @@ * */ public class HomeActivity extends HSActivityParent { - - + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -50,7 +49,6 @@ protected void onCreate(Bundle savedInstanceState) { HomeFragment homeFrag = HSFragmentManager.getHomeFragment(); HSFragmentManager.putFragmentInActivity(this, R.id.container, homeFrag, "Home"); } - } @Override @@ -61,9 +59,6 @@ public void configureActionBar(ActionBar actionBar) { @Override public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.search) { return true; diff --git a/helpstack/src/com/tenmiles/helpstack/activities/ImageAttachmentDisplayActivity.java b/helpstack/src/com/tenmiles/helpstack/activities/ImageAttachmentDisplayActivity.java index c5e2c1a..e273e96 100644 --- a/helpstack/src/com/tenmiles/helpstack/activities/ImageAttachmentDisplayActivity.java +++ b/helpstack/src/com/tenmiles/helpstack/activities/ImageAttachmentDisplayActivity.java @@ -24,11 +24,11 @@ import android.os.Bundle; import android.support.v7.app.ActionBar; -import android.view.Menu; import android.view.MenuItem; import com.tenmiles.helpstack.R; import com.tenmiles.helpstack.fragments.HSFragmentManager; +import com.tenmiles.helpstack.fragments.ImageAttachmentDisplayFragment; public class ImageAttachmentDisplayActivity extends HSActivityParent { @@ -44,8 +44,8 @@ protected void onCreate(Bundle savedInstanceState) { String url = getIntent().getExtras().getString(EXTRAS_STRING_URL); String title = getIntent().getExtras().getString(EXTRAS_TITLE); getSupportActionBar().setTitle(title); - getSupportFragmentManager().beginTransaction() - .add(R.id.container, HSFragmentManager.getImageAttachmentDisplayFragment(this, url)).commit(); + ImageAttachmentDisplayFragment fragment = HSFragmentManager.getImageAttachmentDisplayFragment(this, url); + getSupportFragmentManager().beginTransaction().add(R.id.container, fragment).commit(); } } @@ -56,9 +56,6 @@ public void configureActionBar(ActionBar actionBar) { @Override public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == android.R.id.home) { finish(); diff --git a/helpstack/src/com/tenmiles/helpstack/activities/IssueDetailActivity.java b/helpstack/src/com/tenmiles/helpstack/activities/IssueDetailActivity.java index 15bbdf2..b6668aa 100644 --- a/helpstack/src/com/tenmiles/helpstack/activities/IssueDetailActivity.java +++ b/helpstack/src/com/tenmiles/helpstack/activities/IssueDetailActivity.java @@ -33,7 +33,8 @@ import com.tenmiles.helpstack.model.HSTicket; public class IssueDetailActivity extends HSActivityParent { - + private static final String TAG = IssueDetailActivity.class.getSimpleName(); + public static final String EXTRAS_TICKET = "ticket"; @Override @@ -43,7 +44,8 @@ protected void onCreate(Bundle savedInstanceState) { if (savedInstanceState == null) { IssueDetailFragment mIssueDetailFragment = HSFragmentManager.getIssueDetailFragment(); - HSFragmentManager.putFragmentInActivity(this, R.id.container, mIssueDetailFragment, "IssueDetail"); + + HSFragmentManager.putFragmentInActivity(this, R.id.container, mIssueDetailFragment, TAG); HSTicket ticket = (HSTicket)getIntent().getExtras().getSerializable(EXTRAS_TICKET); mIssueDetailFragment.setTicket(ticket); getHelpStackActionBar().setTitle(ticket.getSubject()); @@ -57,25 +59,17 @@ public void configureActionBar(ActionBar actionBar) { @Override public boolean onCreateOptionsMenu(Menu menu) { - - // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.hs_issue_detail, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == android.R.id.home) { finish(); return true; } - if(id == android.R.id.home) { - finish(); - } return super.onOptionsItemSelected(item); } diff --git a/helpstack/src/com/tenmiles/helpstack/activities/NewIssueActivity.java b/helpstack/src/com/tenmiles/helpstack/activities/NewIssueActivity.java index c7813ed..cc3ac4e 100644 --- a/helpstack/src/com/tenmiles/helpstack/activities/NewIssueActivity.java +++ b/helpstack/src/com/tenmiles/helpstack/activities/NewIssueActivity.java @@ -35,9 +35,8 @@ public class NewIssueActivity extends HSActivityParent { - public static final String EXTRAS_USER = "user"; public static final String RESULT_TICKET = "ticket"; - + public static final String EXTRAS_USER = "user"; public static final String EXTRAS_SUBJECT = "subject"; public static final String EXTRAS_MESSAGE = "message"; public static final String EXTRAS_ATTACHMENT = "attachment"; @@ -58,7 +57,6 @@ protected void onCreate(Bundle savedInstanceState) { } HSFragmentManager.putFragmentInActivity(this, R.id.container, newIssueFragment, "Issue"); } - } @Override @@ -69,17 +67,11 @@ public void configureActionBar(ActionBar actionBar) { @Override public boolean onCreateOptionsMenu(Menu menu) { - - - return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == android.R.id.home) { finishSafe(); @@ -94,6 +86,4 @@ public void finishSafe() { finish(); } - - } diff --git a/helpstack/src/com/tenmiles/helpstack/activities/NewUserActivity.java b/helpstack/src/com/tenmiles/helpstack/activities/NewUserActivity.java index 74aa333..30ca47f 100644 --- a/helpstack/src/com/tenmiles/helpstack/activities/NewUserActivity.java +++ b/helpstack/src/com/tenmiles/helpstack/activities/NewUserActivity.java @@ -32,7 +32,7 @@ public class NewUserActivity extends HSActivityParent { - + private static final String TAG = "NewUser"; @Override protected void onCreate(Bundle savedInstanceState) { @@ -41,11 +41,10 @@ protected void onCreate(Bundle savedInstanceState) { if (savedInstanceState == null) { Bundle bundle = getIntent().getExtras(); - NewUserFragment newUserFragment = new NewUserFragment(); + NewUserFragment newUserFragment = new NewUserFragment(); newUserFragment.setArguments(bundle); - HSFragmentManager.putFragmentInActivity(this, R.id.container, newUserFragment, "NewUser"); - } - + HSFragmentManager.putFragmentInActivity(this, R.id.container, newUserFragment, TAG); + } } @Override @@ -56,9 +55,6 @@ public void configureActionBar(ActionBar actionBar) { @Override public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == android.R.id.home) { HSActivityManager.finishSafe(this); diff --git a/helpstack/src/com/tenmiles/helpstack/activities/SectionActivity.java b/helpstack/src/com/tenmiles/helpstack/activities/SectionActivity.java index 0731e3c..4d8735c 100644 --- a/helpstack/src/com/tenmiles/helpstack/activities/SectionActivity.java +++ b/helpstack/src/com/tenmiles/helpstack/activities/SectionActivity.java @@ -40,7 +40,7 @@ * */ public class SectionActivity extends HSActivityParent { - + private static final String TAG = "Section"; public static final String EXTRAS_SECTION_ITEM = "section_item"; @Override @@ -49,28 +49,21 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.hs_activity_section); if (savedInstanceState == null) { - HSKBItem kbSectionItem = (HSKBItem)getIntent().getSerializableExtra(EXTRAS_SECTION_ITEM); SectionFragment sectionFragment = HSFragmentManager.getSectionFragment(this, kbSectionItem); - HSFragmentManager.putFragmentInActivity(this, R.id.container, sectionFragment, "Section"); + HSFragmentManager.putFragmentInActivity(this, R.id.container, sectionFragment, TAG); getHelpStackActionBar().setTitle(kbSectionItem.getSubject()); - } } @Override public boolean onCreateOptionsMenu(Menu menu) { - - // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.hs_section, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == android.R.id.home) { finish(); diff --git a/helpstack/src/com/tenmiles/helpstack/fragments/ArticleFragment.java b/helpstack/src/com/tenmiles/helpstack/fragments/ArticleFragment.java index 73a9dea..b829648 100644 --- a/helpstack/src/com/tenmiles/helpstack/fragments/ArticleFragment.java +++ b/helpstack/src/com/tenmiles/helpstack/fragments/ArticleFragment.java @@ -37,6 +37,7 @@ public class ArticleFragment extends HSFragmentParent { public static final String HTML_WRAPPER_WITH_TITLE = "" + "

%s

%s"; + public HSKBItem kbItem; private WebView webview; @@ -44,8 +45,7 @@ public ArticleFragment() { } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.hs_fragment_article, container, false); webview = (WebView)rootView.findViewById(R.id.webview); diff --git a/helpstack/src/com/tenmiles/helpstack/fragments/HSFragmentManager.java b/helpstack/src/com/tenmiles/helpstack/fragments/HSFragmentManager.java index 65e335f..40da53b 100644 --- a/helpstack/src/com/tenmiles/helpstack/fragments/HSFragmentManager.java +++ b/helpstack/src/com/tenmiles/helpstack/fragments/HSFragmentManager.java @@ -39,8 +39,7 @@ public class HSFragmentManager { public static HomeFragment getHomeFragment() { - HomeFragment fragment = new HomeFragment(); - return fragment; + return new HomeFragment(); } public static NewIssueFragment getNewIssueFragment(HSUser user) { @@ -52,40 +51,33 @@ public static IssueDetailFragment getIssueDetailFragment() { } public static SearchFragment getSearchFragment() { - SearchFragment fragment = new SearchFragment(); - return fragment; + return new SearchFragment(); } - public static HSFragmentParent getFragmentInActivity(HSActivityParent activity,String tag) { + public static HSFragmentParent getFragmentInActivity(HSActivityParent activity, String tag) { FragmentManager fragMgr = activity.getSupportFragmentManager(); return (HSFragmentParent) fragMgr.findFragmentByTag(tag); } - public static SectionFragment getSectionFragment(HSActivityParent activity, HSKBItem kbItem) - { + public static SectionFragment getSectionFragment(HSActivityParent activity, HSKBItem kbItem) { SectionFragment sectionFragment = new SectionFragment(); sectionFragment.sectionItemToDisplay = kbItem; return sectionFragment; } - public static ArticleFragment getArticleFragment(HSActivityParent activity, HSKBItem kbItem) - { + public static ArticleFragment getArticleFragment(HSActivityParent activity, HSKBItem kbItem) { ArticleFragment sectionFragment = new ArticleFragment(); sectionFragment.kbItem = kbItem; return sectionFragment; } - public static ImageAttachmentDisplayFragment getImageAttachmentDisplayFragment(HSActivityParent activity, String url) - { + public static ImageAttachmentDisplayFragment getImageAttachmentDisplayFragment(HSActivityParent activity, String url) { ImageAttachmentDisplayFragment fragment = new ImageAttachmentDisplayFragment(); fragment.image_url = url; return fragment; } - - - + public static void putFragmentInActivity(HSActivityParent activity, int resid, HSFragmentParent frag, String tag) { - // above is proper. FragmentManager fragMgr = activity.getSupportFragmentManager(); FragmentTransaction xact = fragMgr.beginTransaction(); xact.replace(resid, frag, tag); @@ -93,7 +85,6 @@ public static void putFragmentInActivity(HSActivityParent activity, int resid, H } public static void putFragmentBackStackInActivity(HSActivityParent activity, int resid, HSFragmentParent frag, String tag) { - // above is proper. FragmentManager fragMgr = activity.getSupportFragmentManager(); FragmentTransaction xact = fragMgr.beginTransaction(); xact.replace(resid, frag); diff --git a/helpstack/src/com/tenmiles/helpstack/fragments/HSFragmentParent.java b/helpstack/src/com/tenmiles/helpstack/fragments/HSFragmentParent.java index e3dcc37..fd71b55 100644 --- a/helpstack/src/com/tenmiles/helpstack/fragments/HSFragmentParent.java +++ b/helpstack/src/com/tenmiles/helpstack/fragments/HSFragmentParent.java @@ -22,11 +22,11 @@ package com.tenmiles.helpstack.fragments; -import com.tenmiles.helpstack.activities.HSActivityParent; - import android.support.v4.app.Fragment; import android.support.v7.app.ActionBar; +import com.tenmiles.helpstack.activities.HSActivityParent; + /** * * This is the parent class for any Fragment used in HelpStack. diff --git a/helpstack/src/com/tenmiles/helpstack/fragments/HomeFragment.java b/helpstack/src/com/tenmiles/helpstack/fragments/HomeFragment.java index aa20020..f79041b 100644 --- a/helpstack/src/com/tenmiles/helpstack/fragments/HomeFragment.java +++ b/helpstack/src/com/tenmiles/helpstack/fragments/HomeFragment.java @@ -66,11 +66,9 @@ public class HomeFragment extends HSFragmentParent { private ExpandableListView mExpandableListView; private LocalAdapter mAdapter; - - private SearchFragment mSearchFragment; + private SearchFragment mSearchFragment; private HSSource gearSource; - private HSKBItem[] fetchedKbArticles; private HSTicket[] fetchedTickets; @@ -78,12 +76,10 @@ public class HomeFragment extends HSFragmentParent { private int numberOfServerCallWaiting = 0; public HomeFragment() { - } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.hs_fragment_home, container, false); @@ -130,7 +126,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, else { refreshList(); } - } return rootView; @@ -174,9 +169,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); - // Inflate the menu; this adds items to the action bar if it is present. inflater.inflate(R.menu.hs_search_menu, menu); - MenuItem searchItem = menu.findItem(R.id.search); mSearchFragment.addSearchViewInMenuItem(getActivity(), searchItem); } @@ -188,37 +181,26 @@ public void onDetach() { } private void initializeView() { + startHomeScreenLoadingDisplay(true); - startHomeScreenLoadingDisplay(true); - - // Show Loading gearSource.requestKBArticle("FAQ", null, new OnFetchedArraySuccessListener() { - - @Override public void onSuccess(Object[] kbArticles) { - fetchedKbArticles = (HSKBItem[]) kbArticles; mSearchFragment.setKBArticleList(fetchedKbArticles); refreshList(); - - // Stop Loading startHomeScreenLoadingDisplay(false); - } - }, new ErrorListener() { @Override public void onErrorResponse(VolleyError arg0) { - // Stop Loading startHomeScreenLoadingDisplay(false); if(numberOfServerCallWaiting == 0) { HSUtils.showAlertDialog(getActivity(), getResources().getString(R.string.hs_error), getResources().getString(R.string.hs_error_fetching_articles_issues)); } } - }); gearSource.requestAllTickets(new OnFetchedArraySuccessListener() { @@ -233,12 +215,10 @@ public void onSuccess(Object[] tickets) { @Override public void onErrorResponse(VolleyError error) { - // Stop Loading startHomeScreenLoadingDisplay(false); if(numberOfServerCallWaiting == 0) { HSUtils.showAlertDialog(getActivity(), getResources().getString(R.string.hs_error), getResources().getString(R.string.hs_error_fetching_articles_issues)); } - } }); @@ -256,7 +236,6 @@ public void startHomeScreenLoadingDisplay(boolean loading) { if (getHelpStackActivity() != null) { // To handle a crash that happens if activity is re-created and we receive network response after that. getHelpStackActivity().setProgressBarIndeterminateVisibility(false); } - } } } @@ -264,9 +243,7 @@ public void startHomeScreenLoadingDisplay(boolean loading) { protected OnChildClickListener expandableChildViewClickListener = new OnChildClickListener() { @Override - public boolean onChildClick(ExpandableListView parent, View v, - int groupPosition, int childPosition, long id) { - + public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { if (groupPosition == 0) { HSKBItem kbItemClicked = (HSKBItem) mAdapter.getChild(groupPosition, childPosition); articleClickedOnPosition(kbItemClicked); @@ -286,7 +263,6 @@ public boolean onChildClick(ExpandableListView parent, View v, @Override public void onClick(View v) { - gearSource.launchCreateNewTicketScreen(HomeFragment.this, REQUEST_CODE_NEW_TICKET); } }; @@ -296,50 +272,36 @@ public void onClick(View v) { @Override public void startReportAnIssue() { - mSearchFragment.setVisibility(false); gearSource.launchCreateNewTicketScreen(HomeFragment.this, REQUEST_CODE_NEW_TICKET); } - - }; - - ////////////////////////////////////// // UTILITY FUNCTIONS /// ///////////////////////////////////// - - private void refreshList() { - mAdapter.clearAll(); - - mAdapter.addParent(0, getString(R.string.hs_articles_title)); + mAdapter.addParent(0, getString(R.string.hs_articles_title)); if (fetchedKbArticles != null) { for (int i = 0; i < fetchedKbArticles.length ; i++) { - - HSKBItem item = (HSKBItem) fetchedKbArticles[i]; + HSKBItem item = fetchedKbArticles[i]; mAdapter.addChild(0, item); } } - if (fetchedTickets != null && fetchedTickets.length > 0) { mAdapter.addParent(1, getString(R.string.hs_issues_title)); for (int i = 0; i < fetchedTickets.length ; i++) { - - HSTicket item = (HSTicket) fetchedTickets[i]; + HSTicket item = fetchedTickets[i]; mAdapter.addChild(1, item); } } - mAdapter.notifyDataSetChanged(); - expandAll(); } @@ -353,31 +315,26 @@ private void expandAll() { protected void articleClickedOnPosition(HSKBItem kbItemClicked) { if(kbItemClicked.getArticleType() == HSKBItem.TYPE_ARTICLE) { HSActivityManager.startArticleActivity(this, kbItemClicked, REQUEST_CODE_NEW_TICKET); - - } else { + } + else { HSActivityManager.startSectionActivity(this, kbItemClicked, REQUEST_CODE_NEW_TICKET); } } - private class LocalAdapter extends HSBaseExpandableListAdapter - { + private class LocalAdapter extends HSBaseExpandableListAdapter { public LocalAdapter(Context context) { super(context); } @Override - public View getChildView(final int groupPosition,final int childPosition, - boolean isLastChild, View convertView, ViewGroup parent) { - + public View getChildView(final int groupPosition,final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ChildViewHolder holder; if (convertView == null) { convertView = mLayoutInflater.inflate(R.layout.hs_expandable_child_home_default, null); holder = new ChildViewHolder(); - holder.textView1 = (TextView) convertView.findViewById(R.id.textView1); - convertView.setTag(holder); } else { @@ -387,8 +344,6 @@ public View getChildView(final int groupPosition,final int childPosition, if (groupPosition == 0) { HSKBItem item = (HSKBItem) getChild(groupPosition, childPosition); holder.textView1.setText(item.getSubject()); - - } else if (groupPosition == 1){ HSTicket item = (HSTicket) getChild(groupPosition, childPosition); @@ -399,16 +354,13 @@ else if (groupPosition == 1){ } @Override - public View getGroupView(int groupPosition, boolean isExpanded, - View convertView, ViewGroup parent) { + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { ParentViewHolder holder; if (convertView == null) { convertView = mLayoutInflater.inflate(R.layout.hs_expandable_parent_home_default, null); holder = new ParentViewHolder(); - holder.textView1 = (TextView) convertView.findViewById(R.id.textView1); - convertView.setTag(holder); } else { @@ -416,9 +368,7 @@ public View getGroupView(int groupPosition, boolean isExpanded, } String text = (String) getGroup(groupPosition); - holder.textView1.setText(text); - return convertView; } diff --git a/helpstack/src/com/tenmiles/helpstack/fragments/ImageAttachmentDisplayFragment.java b/helpstack/src/com/tenmiles/helpstack/fragments/ImageAttachmentDisplayFragment.java index d9875ac..013954d 100644 --- a/helpstack/src/com/tenmiles/helpstack/fragments/ImageAttachmentDisplayFragment.java +++ b/helpstack/src/com/tenmiles/helpstack/fragments/ImageAttachmentDisplayFragment.java @@ -53,25 +53,17 @@ public class ImageAttachmentDisplayFragment extends HSFragmentParent { public String image_url; - GestureImageView imageView; - LocalAsync localAsync; - - private View progressView; - - boolean isAttachmentDownloaded = false; + private GestureImageView imageView; + private LocalAsync localAsync; + private View progressView; + private boolean isAttachmentDownloaded = false; @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - - - View rootView = inflater.inflate( - R.layout.hs_fragment_image_attachment_display, container, - false); - - progressView = rootView.findViewById(R.id.progressHolder); - - imageView = (GestureImageView) rootView.findViewById(R.id.image); + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + + View rootView = inflater.inflate(R.layout.hs_fragment_image_attachment_display, container, false); + progressView = rootView.findViewById(R.id.progressHolder); + imageView = (GestureImageView) rootView.findViewById(R.id.image); setHasOptionsMenu(true); @@ -89,8 +81,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, showLoading(true); loadImage(); } - - } return rootView; @@ -130,7 +120,6 @@ public void onPrepareOptionsMenu(Menu menu) { else { downloadItem.setVisible(false); } - } @Override @@ -155,19 +144,15 @@ else if (image_url.startsWith("content")) { selectedBitmap = NewIssueFragment.downscaleAndReadBitmap(getActivity(), Uri.parse(image_url)); imageView.setImageBitmap(selectedBitmap); showLoading(false); - } - catch (FileNotFoundException e) { + } catch (FileNotFoundException e) { Toast.makeText(getActivity(), "Sorry! could not open attachment, unknown image", Toast.LENGTH_LONG).show(); getActivity().finish(); } - } else { Toast.makeText(getActivity(), "Sorry! could not open attachment, unknown image", Toast.LENGTH_LONG).show(); getActivity().finish(); } - - } public void closeAsync() { @@ -217,7 +202,7 @@ private static Bitmap downloadBitmap(String url) throws IOException { InputStream in = null; try { BitmapFactory.Options options = new BitmapFactory.Options(); - bitmap = BitmapFactory.decodeStream(new URL(url).openStream(),null,options); + bitmap = BitmapFactory.decodeStream(new URL(url).openStream(), null, options); } catch (IOException e) { Log.e(TAG, "Could not load Bitmap from: " + url); @@ -228,7 +213,7 @@ private static Bitmap downloadBitmap(String url) throws IOException { } } - return bitmap; + return bitmap; } } diff --git a/helpstack/src/com/tenmiles/helpstack/fragments/IssueDetailFragment.java b/helpstack/src/com/tenmiles/helpstack/fragments/IssueDetailFragment.java index 8d59e1c..b6cbca7 100644 --- a/helpstack/src/com/tenmiles/helpstack/fragments/IssueDetailFragment.java +++ b/helpstack/src/com/tenmiles/helpstack/fragments/IssueDetailFragment.java @@ -30,6 +30,7 @@ import android.database.Cursor; import android.graphics.Bitmap; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.provider.MediaStore.Images.ImageColumns; import android.text.method.LinkMovementMethod; @@ -71,15 +72,11 @@ import java.util.Date; import java.util.StringTokenizer; -public class IssueDetailFragment extends HSFragmentParent -{ +public class IssueDetailFragment extends HSFragmentParent { private final int REQUEST_CODE_PHOTO_PICKER = 100; - - public IssueDetailFragment() { - } - - private ExpandableListView mExpandableListView; + + private ExpandableListView mExpandableListView; private LocalAdapter mAdapter; private ImageView sendButton; private EditText replyEditTextView; @@ -89,18 +86,16 @@ public IssueDetailFragment() { private HSTicket ticket; private HSTicketUpdate[] fetchedUpdates; private HSAttachment selectedAttachment; - - - - + + public IssueDetailFragment() { + } + @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.hs_fragment_issue_detail, null); - - replyEditTextView = (EditText) rootView.findViewById(R.id.replyEditText); + replyEditTextView = (EditText) rootView.findViewById(R.id.replyEditText); sendButton = (ImageView)rootView.findViewById(R.id.button1); sendButton.setOnClickListener(sendReplyListener); @@ -141,8 +136,7 @@ public void onActivityCreated(Bundle savedInstanceState) { ticket = (HSTicket) savedInstanceState.getSerializable("ticket"); selectedAttachment = (HSAttachment) savedInstanceState.getSerializable("selectedAttachment"); replyEditTextView.setText(savedInstanceState.getString("replyEditTextView")); - - + refreshList(); resetAttachmentImage(); @@ -170,7 +164,6 @@ public void onPause() { super.onPause(); HSAttachment[] attachmentArray = null; - if (selectedAttachment != null) { attachmentArray = new HSAttachment[1]; attachmentArray[0] = selectedAttachment; @@ -182,27 +175,27 @@ public void onPause() { @Override public void onActivityResult(int requestCode, int resultCode, Intent intent) { - if(requestCode == REQUEST_CODE_PHOTO_PICKER && resultCode == Activity.RESULT_OK) - { - + if(requestCode == REQUEST_CODE_PHOTO_PICKER && resultCode == Activity.RESULT_OK) { Uri selectedImage = Uri.parse(intent.getStringExtra("URI")); - - //User had pick an image. - Cursor cursor = getActivity().getContentResolver().query(selectedImage, new String[] { - ImageColumns.DATA, - ImageColumns.DISPLAY_NAME, - ImageColumns.MIME_TYPE }, null, null, null); - cursor.moveToFirst(); - - String display_name = cursor.getString(cursor.getColumnIndex(ImageColumns.DISPLAY_NAME)); + + Cursor cursor = getActivity().getContentResolver().query(selectedImage, + new String[] { + ImageColumns.DATA, + ImageColumns.DISPLAY_NAME, + ImageColumns.MIME_TYPE + }, null, null, null); + + if (cursor != null) { + cursor.moveToFirst(); + } + + String display_name = cursor.getString(cursor.getColumnIndex(ImageColumns.DISPLAY_NAME)); String mime_type = cursor.getString(cursor.getColumnIndex(ImageColumns.MIME_TYPE)); - - cursor.close(); + + cursor.close(); selectedAttachment = HSAttachment.createAttachment(selectedImage.toString(), display_name, mime_type); - resetAttachmentImage(); - } }; @@ -214,16 +207,13 @@ public void onDetach() { } private void refreshUpdateFromServer() { - getHelpStackActivity().setProgressBarIndeterminateVisibility(true); gearSource.requestAllUpdatesOnTicket("ALL_UPDATES", ticket, new OnFetchedArraySuccessListener() { @Override public void onSuccess(Object[] successObject) { - fetchedUpdates = (HSTicketUpdate[]) successObject; - refreshList(); getHelpStackActivity().setProgressBarIndeterminateVisibility(false); @@ -242,21 +232,17 @@ public void onErrorResponse(VolleyError error) { private OnChildItemClickListener listChildClickListener = new OnChildItemClickListener() { @Override - public boolean onChildListItemLongClick(int groupPosition, - int childPosition, String type, Object map) { + public boolean onChildListItemLongClick(int groupPosition, int childPosition, String type, Object map) { return false; } @Override - public void onChildListItemClick(int groupPosition, int childPosition, - String type, Object map) { + public void onChildListItemClick(int groupPosition, int childPosition, String type, Object map) { showAttachments(((HSTicketUpdate)map).getAttachments()); } @Override - public void onChildCheckedListner(int groupPosition, int childPosition, - String type, Object map, boolean checked) { - + public void onChildCheckedListener(int groupPosition, int childPosition, String type, Object map, boolean checked) { } }; @@ -292,7 +278,6 @@ else if (which == 1) { }); alertBuilder.create().show(); } - } }; @@ -300,7 +285,6 @@ else if (which == 1) { @Override public void onClick(View v) { - String message = replyEditTextView.getText().toString(); if(message.trim().length() == 0) { return; @@ -308,18 +292,19 @@ public void onClick(View v) { getHelpStackActivity().setProgressBarIndeterminateVisibility(true); sendButton.setEnabled(false); - sendButton.setAlpha((float)0.4); - - HSAttachment[] attachmentArray = null; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + sendButton.setAlpha((float)0.4); + } + + HSAttachment[] attachmentArray = null; if (selectedAttachment != null) { attachmentArray = new HSAttachment[1]; attachmentArray[0] = selectedAttachment; } - InputMethodManager imm = (InputMethodManager)getActivity().getSystemService( - Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(replyEditTextView.getWindowToken(), 0); + InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(replyEditTextView.getWindowToken(), 0); gearSource.addReplyOnATicket("REPLY_TO_A_TICKET", message, attachmentArray, ticket, new OnFetchedSuccessListener() { @@ -328,8 +313,10 @@ public void onSuccess(Object successObject) { clearFormData(); sendButton.setEnabled(true); - sendButton.setAlpha((float)1.0); - HSTicketUpdate update = (HSTicketUpdate) successObject; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + sendButton.setAlpha((float)1.0); + } + HSTicketUpdate update = (HSTicketUpdate) successObject; ArrayList updateList = new ArrayList(); updateList.addAll(Arrays.asList(fetchedUpdates)); @@ -355,8 +342,10 @@ public void onSuccess(Object successObject) { public void onErrorResponse(VolleyError error) { HSUtils.showAlertDialog(getActivity(), getResources().getString(R.string.hs_error), getResources().getString(R.string.hs_error_posting_reply)); sendButton.setEnabled(true); - sendButton.setAlpha((float)1.0); - getHelpStackActivity().setProgressBarIndeterminateVisibility(false); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + sendButton.setAlpha((float)1.0); + } + getHelpStackActivity().setProgressBarIndeterminateVisibility(false); } }); } @@ -375,23 +364,20 @@ private void expandAll() { } private void refreshList() { - mAdapter.clearAll(); if (fetchedUpdates != null) { mAdapter.addParent(1, ""); - for (int i = 0; i < fetchedUpdates.length; i++) { - mAdapter.addChild(1, fetchedUpdates[i]); - } + for (HSTicketUpdate fetchedUpdate : fetchedUpdates) { + mAdapter.addChild(1, fetchedUpdate); + } } mAdapter.notifyDataSetChanged(); - expandAll(); } private void showAttachments(final HSAttachment[] attachmentsArray) { - if (attachmentsArray.length == 1) { HSAttachment attachmentToShow = attachmentsArray[0]; openAttachment(attachmentToShow); @@ -402,6 +388,7 @@ private void showAttachments(final HSAttachment[] attachmentsArray) { for(HSAttachment attachment : attachmentsArray) { attachments.add(attachment.getFileName()); } + String[] attachmentNames = attachments.toArray(new String[attachments.size()]); AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity()); LayoutInflater inflater = getActivity().getLayoutInflater(); @@ -427,16 +414,13 @@ public void onItemClick(AdapterView parent, View view, dialog.show(); } - - private class LocalAdapter extends HSBaseExpandableListAdapter - { + private class LocalAdapter extends HSBaseExpandableListAdapter { public LocalAdapter(Context context) { super(context); } @Override - public View getChildView(final int groupPosition, final int childPosition, - boolean isLastChild, View convertView, ViewGroup parent) { + public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ChildViewHolder holder; if (convertView == null) { holder = new ChildViewHolder(); @@ -475,21 +459,22 @@ public View getChildView(final int groupPosition, final int childPosition, holder.textView1.setText(text); } - - if(update.isUserUpdate()) { holder.nameField.setText(getResources().getString(R.string.hs_me)); - }else { + } + else { if(update.name != null) { holder.nameField.setText(update.name); - } else { + } + else { holder.nameField.setText(getResources().getString(R.string.hs_staff)); } } - if(update.isAttachmentEmtpy()) { + if(update.isAttachmentEmpty()) { holder.attachmentButton.setVisibility(View.INVISIBLE); - }else { + } + else { holder.attachmentButton.setVisibility(View.VISIBLE); holder.attachmentButton.setFocusable(true); holder.attachmentButton.setOnClickListener(new OnClickListener() { @@ -502,7 +487,6 @@ public void onClick(View v) { } Date updatedTime = update.getUpdatedTime(); - String dateString = HSUtils.convertToHumanReadableTime(updatedTime, Calendar.getInstance().getTimeInMillis()); holder.timeField.setText(dateString.trim()); @@ -510,15 +494,13 @@ public void onClick(View v) { } @Override - public View getGroupView(int groupPosition, boolean isExpanded, - View convertView, ViewGroup parent) { + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { ParentViewHolder holder; if (convertView == null) { convertView = mLayoutInflater.inflate(R.layout.hs_expandable_parent_issue_detail_default, null); holder = new ParentViewHolder(); holder.parent = convertView; - - convertView.setTag(holder); + convertView.setTag(holder); } else { holder = (ParentViewHolder) convertView.getTag(); @@ -565,7 +547,6 @@ private void resetAttachmentImage() { this.mAttachmentButton.setImageResource(R.drawable.hs_add_attachment); } else { - try { Uri uri = Uri.parse(selectedAttachment.getUrl()); Bitmap selectedBitmap; @@ -574,16 +555,12 @@ private void resetAttachmentImage() { } catch (FileNotFoundException e) { e.printStackTrace(); } - - } - } private void scrollListToBottom() { mExpandableListView.setSelectedChild(0, mAdapter.getChildrenCount(0) - 1, true); } - /** * @return the ticket @@ -599,9 +576,7 @@ public HSTicket getTicket() { public void setTicket(HSTicket ticket) { this.ticket = ticket; } - - - + /// Attachments private void openAttachment(HSAttachment attachment) { if(knownAttachmentType(attachment)) { @@ -610,12 +585,10 @@ private void openAttachment(HSAttachment attachment) { else { downloadAttachment(attachment); } - } - private boolean knownAttachmentType(HSAttachment attachment) - { - String mime_type = attachment.getMime_type(); + private boolean knownAttachmentType(HSAttachment attachment) { + String mime_type = attachment.getMimeType(); if (mime_type != null && mime_type.startsWith("image")) { return true; } @@ -628,16 +601,16 @@ private boolean knownAttachmentType(HSAttachment attachment) private boolean isKnowFileNameType(String file_name) { // get the type of file - StringTokenizer strtok = new StringTokenizer(file_name, "."); + StringTokenizer stringTokenizer = new StringTokenizer(file_name, "."); // getting the last token String fileType = null; - while (strtok.hasMoreTokens()) { + while (stringTokenizer.hasMoreTokens()) { // parsing to get last token - fileType = strtok.nextToken(); + fileType = stringTokenizer.nextToken(); } String[] knownFileType = {"png", "jpg", "jpeg"}; - if(containString(knownFileType,fileType.toLowerCase())) { + if(fileType!=null && containString(knownFileType, fileType.toLowerCase())) { return true; } return false; diff --git a/helpstack/src/com/tenmiles/helpstack/fragments/NewIssueFragment.java b/helpstack/src/com/tenmiles/helpstack/fragments/NewIssueFragment.java index 4ce4c1b..179c87e 100644 --- a/helpstack/src/com/tenmiles/helpstack/fragments/NewIssueFragment.java +++ b/helpstack/src/com/tenmiles/helpstack/fragments/NewIssueFragment.java @@ -22,8 +22,6 @@ package com.tenmiles.helpstack.fragments; -import java.io.FileNotFoundException; - import android.app.Activity; import android.app.AlertDialog; import android.content.Context; @@ -61,6 +59,8 @@ import com.tenmiles.helpstack.model.HSTicket; import com.tenmiles.helpstack.model.HSUser; +import java.io.FileNotFoundException; + public class NewIssueFragment extends HSFragmentParent { private final int REQUEST_CODE_PHOTO_PICKER = 100; @@ -73,15 +73,13 @@ public class NewIssueFragment extends HSFragmentParent { public static final String EXTRAS_MESSAGE = NewIssueActivity.EXTRAS_MESSAGE; public static final String EXTRAS_ATTACHMENT = NewIssueActivity.EXTRAS_ATTACHMENT; + private HSUser userDetails; EditText subjectField, messageField; ImageView imageView1; - - private HSUser userDetails; HSAttachment selectedAttachment; HSSource gearSource; - public static NewIssueFragment createNewIssueFragment(HSUser user) - { + public static NewIssueFragment createNewIssueFragment(HSUser user) { NewIssueFragment frag = new NewIssueFragment(); if(user != null) { @@ -94,21 +92,16 @@ public static NewIssueFragment createNewIssueFragment(HSUser user) } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setHasOptionsMenu(true); View rootView = inflater.inflate(R.layout.hs_fragment_new_issue, container, false); this.subjectField = (EditText) rootView.findViewById(R.id.subjectField); - this.messageField = (EditText) rootView.findViewById(R.id.messageField); - this.imageView1 = (ImageView) rootView.findViewById(R.id.imageView1); this.imageView1.setOnClickListener(attachmentClickListener); - // Read user value Bundle args = savedInstanceState; if (args == null) { @@ -194,7 +187,6 @@ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { @Override public boolean onOptionsItemSelected(MenuItem item) { - int id = item.getItemId(); if (id == R.id.doneItem) { @@ -253,34 +245,37 @@ else if(id == R.id.clearItem) { public void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); - switch(requestCode) { - case REQUEST_CODE_PHOTO_PICKER: - if(resultCode == Activity.RESULT_OK){ + if(requestCode == REQUEST_CODE_PHOTO_PICKER) { + if (resultCode == Activity.RESULT_OK) { + + Uri selectedImage = Uri.parse(intent.getStringExtra("URI")); - Uri selectedImage = Uri.parse(intent.getStringExtra("URI")); + //User had pick an image. + Cursor cursor = getActivity().getContentResolver().query(selectedImage, + new String[]{ + ImageColumns.DATA, + ImageColumns.DISPLAY_NAME, + ImageColumns.MIME_TYPE + }, null, null, null); - //User had pick an image. - Cursor cursor = getActivity().getContentResolver().query(selectedImage, new String[] { - ImageColumns.DATA, - ImageColumns.DISPLAY_NAME, - ImageColumns.MIME_TYPE }, null, null, null); + if (cursor != null) { cursor.moveToFirst(); + } - String display_name = cursor.getString(cursor.getColumnIndex(ImageColumns.DISPLAY_NAME)); - String mime_type = cursor.getString(cursor.getColumnIndex(ImageColumns.MIME_TYPE)); + String display_name = cursor.getString(cursor.getColumnIndex(ImageColumns.DISPLAY_NAME)); + String mime_type = cursor.getString(cursor.getColumnIndex(ImageColumns.MIME_TYPE)); - cursor.close(); + cursor.close(); - selectedAttachment = HSAttachment.createAttachment(selectedImage.toString(), display_name, mime_type); + selectedAttachment = HSAttachment.createAttachment(selectedImage.toString(), display_name, mime_type); - resetAttachmentImage(); - break; - } - case REQUEST_CODE_NEW_TICKET: - if (resultCode == HSActivityManager.resultCode_sucess) { - HSActivityManager.sendSuccessSignal(getActivity(), intent); - break; - } + resetAttachmentImage(); + } + } + else if(requestCode == REQUEST_CODE_NEW_TICKET) { + if (resultCode == HSActivityManager.resultCode_sucess) { + HSActivityManager.sendSuccessSignal(getActivity(), intent); + } } } @@ -320,7 +315,6 @@ else if (which == 1) { }); alertBuilder.create().show(); } - } }; @@ -341,7 +335,6 @@ private void resetAttachmentImage() { } } - private void clearFormData() { this.subjectField.setText(""); this.messageField.setText(""); @@ -374,8 +367,7 @@ public static Bitmap downscaleAndReadBitmap(Context context, Uri selectedImage) int width_tmp = o.outWidth, height_tmp = o.outHeight; int scale = 1; while (true) { - if (width_tmp / 2 < REQUIRED_SIZE - || height_tmp / 2 < REQUIRED_SIZE) { + if ((width_tmp/2 < REQUIRED_SIZE) || (height_tmp/2 < REQUIRED_SIZE)) { break; } width_tmp /= 2; diff --git a/helpstack/src/com/tenmiles/helpstack/fragments/NewUserFragment.java b/helpstack/src/com/tenmiles/helpstack/fragments/NewUserFragment.java index a15366a..64b0b5c 100644 --- a/helpstack/src/com/tenmiles/helpstack/fragments/NewUserFragment.java +++ b/helpstack/src/com/tenmiles/helpstack/fragments/NewUserFragment.java @@ -61,40 +61,34 @@ public class NewUserFragment extends HSFragmentParent { private String subject; private String message; private HSAttachment[] attachmentArray; + private EditText firstNameField, lastNameField, emailField; + private HSSource gearSource; public NewUserFragment() { - } - - EditText firstNameField, lastNameField, emailField; - - HSSource gearSource; - + @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setHasOptionsMenu(true); View rootView = inflater.inflate(R.layout.hs_fragment_new_user, container, false); - this.firstNameField = (EditText) rootView.findViewById(R.id.firstname); this.lastNameField = (EditText) rootView.findViewById(R.id.lastname); this.emailField = (EditText) rootView.findViewById(R.id.email); - - return rootView; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); + outState.putString(EXTRAS_FIRST_NAME, firstNameField.getText().toString()); outState.putString(EXTRAS_LAST_NAME, lastNameField.getText().toString()); outState.putString(EXTRAS_EMAIL, emailField.getText().toString()); outState.putString(EXTRAS_SUBJECT, subject); outState.putString(EXTRAS_MESSAGE, message); + if (attachmentArray != null) { Gson gson = new Gson(); outState.putString(EXTRAS_ATTACHMENT, gson.toJson(attachmentArray)); @@ -191,7 +185,6 @@ public void onSuccess(Object successObject) { @Override public void onSuccess(HSUser udpatedUserDetail, HSTicket ticket) { - getHelpStackActivity().setSupportProgressBarIndeterminateVisibility(false); sendSuccessSignal(ticket); gearSource.clearTicketDraft(); @@ -217,8 +210,7 @@ public void onErrorResponse(VolleyError error) { return true; } - - + return super.onOptionsItemSelected(item); } diff --git a/helpstack/src/com/tenmiles/helpstack/fragments/SearchFragment.java b/helpstack/src/com/tenmiles/helpstack/fragments/SearchFragment.java index c9c469b..12e626c 100644 --- a/helpstack/src/com/tenmiles/helpstack/fragments/SearchFragment.java +++ b/helpstack/src/com/tenmiles/helpstack/fragments/SearchFragment.java @@ -22,10 +22,6 @@ package com.tenmiles.helpstack.fragments; -import java.util.ArrayList; -import java.util.List; - -import android.app.Activity; import android.content.Context; import android.os.Build; import android.os.Bundle; @@ -49,6 +45,9 @@ import com.tenmiles.helpstack.activities.HSActivityManager; import com.tenmiles.helpstack.model.HSKBItem; +import java.util.ArrayList; +import java.util.List; + /** * Search Fragment * @@ -64,13 +63,10 @@ public class SearchFragment extends HSFragmentParent { private OnReportAnIssueClickListener articleSelecetedListener; public SearchFragment() { - // Required empty public constructor } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.hs_fragment_search, container, false); setVisibility(false); listView = (ListView)rootView.findViewById(R.id.searchList); @@ -80,10 +76,8 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, report_an_issue_view.findViewById(R.id.button1).setOnClickListener(reportIssueClickListener); listView.addFooterView(report_an_issue_view); - - listView.setAdapter(searchAdapter); - - listView.setOnItemClickListener(listItemClickListener); + listView.setAdapter(searchAdapter); + listView.setOnItemClickListener(listItemClickListener); return rootView; } @@ -136,7 +130,6 @@ public void onItemClick(AdapterView parent, View view, protected void articleClickedOnPosition(HSKBItem kbItemClicked) { if(kbItemClicked.getArticleType() == HSKBItem.TYPE_ARTICLE) { HSActivityManager.startArticleActivity(this, kbItemClicked, HomeFragment.REQUEST_CODE_NEW_TICKET); - } else { HSActivityManager.startSectionActivity(this, kbItemClicked, HomeFragment.REQUEST_CODE_NEW_TICKET); } @@ -161,9 +154,7 @@ public void onClick(View v) { @Override public boolean onQueryTextSubmit(String q) { - doSearchForQuery(q); - return true; } @@ -193,15 +184,12 @@ public boolean onMenuItemActionCollapse(MenuItem item) { if (Build.VERSION.SDK_INT >= 14) { searchView.setQueryHint(getString(R.string.hs_search_hint)); // Works on android 4.0 and above, but crashes in below version. } - - } private OnClickListener reportIssueClickListener = new OnClickListener() { @Override public void onClick(View v) { - if (articleSelecetedListener != null) { articleSelecetedListener.startReportAnIssue(); } @@ -216,7 +204,7 @@ public interface OnReportAnIssueClickListener { public void startReportAnIssue(); } - private class SearchAdapter extends BaseAdapter implements Filterable{ + private class SearchAdapter extends BaseAdapter implements Filterable { private HSKBItem[] allKBItems; private HSKBItem[] searchResults; @@ -257,7 +245,8 @@ public View getView(final int position, View convertView, ViewGroup parent) { holder = new ViewHolder(); holder.textview = (TextView)convertView.findViewById(R.id.sectionlisttextview); convertView.setTag(holder); - }else { + } + else { holder = (ViewHolder)convertView.getTag(); } holder.textview.setText(((HSKBItem)this.searchResults[position]).getSubject()); @@ -286,13 +275,15 @@ protected FilterResults performFiltering(CharSequence constraint) { results.values = (HSKBItem[])allKBItems; results.count = allKBItems.length; - } else { + } + else { // We perform filtering operation List filterList = new ArrayList(); for (HSKBItem p : allKBItems) { - if (p.getSubject().toUpperCase().contains(constraint.toString().toUpperCase())) //.startsWith(constraint.toString().toUpperCase())) - filterList.add(p); + if (p.getSubject().toUpperCase().contains(constraint.toString().toUpperCase())) { //.startsWith(constraint.toString().toUpperCase())) + filterList.add(p); + } } HSKBItem[] values = filterList.toArray(new HSKBItem[filterList.size()]); results.values = values; @@ -306,14 +297,13 @@ protected void publishResults(CharSequence constraint, FilterResults results) { if(results == null) { notifyDataSetInvalidated(); - }else { + } + else { searchResults = (HSKBItem[]) results.values; notifyDataSetChanged(); } - } - } - } + } diff --git a/helpstack/src/com/tenmiles/helpstack/fragments/SectionFragment.java b/helpstack/src/com/tenmiles/helpstack/fragments/SectionFragment.java index 08a361b..2cba3d3 100644 --- a/helpstack/src/com/tenmiles/helpstack/fragments/SectionFragment.java +++ b/helpstack/src/com/tenmiles/helpstack/fragments/SectionFragment.java @@ -58,26 +58,23 @@ public class SectionFragment extends HSFragmentParent { private static final int REQUEST_CODE_NEW_TICKET = HomeFragment.REQUEST_CODE_NEW_TICKET; - + + public HSKBItem sectionItemToDisplay; + private ListView mListView; private SectionAdapter mAdapter; private SearchFragment mSearchFragment; - - public HSKBItem sectionItemToDisplay; - - private HSSource gearSource; + private HSSource gearSource; private HSKBItem[] fetchedKbItems; public SectionFragment() { - } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.hs_fragment_section, container, false); - + // List View mListView = (ListView)rootView.findViewById(R.id.sectionlistview); @@ -110,7 +107,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, refreshList(); } - return rootView; } @@ -148,8 +144,7 @@ public void onDetach() { } private void initializeView() { - - getHelpStackActivity().setProgressBarIndeterminateVisibility(true); + getHelpStackActivity().setProgressBarIndeterminateVisibility(true); gearSource.requestKBArticle("SECTION_FAQ", this.sectionItemToDisplay, new OnFetchedArraySuccessListener() { @@ -175,9 +170,7 @@ public void onErrorResponse(VolleyError error) { @Override public void onClick(View v) { - - gearSource.launchCreateNewTicketScreen(SectionFragment.this, REQUEST_CODE_NEW_TICKET); - + gearSource.launchCreateNewTicketScreen(SectionFragment.this, REQUEST_CODE_NEW_TICKET); } }; @@ -185,12 +178,9 @@ public void onClick(View v) { @Override public void startReportAnIssue() { - - mSearchFragment.setVisibility(false); + mSearchFragment.setVisibility(false); gearSource.launchCreateNewTicketScreen(SectionFragment.this, REQUEST_CODE_NEW_TICKET); } - - }; protected OnItemClickListener listItemClickListener = new OnItemClickListener() { @@ -210,8 +200,8 @@ private void refreshList() { protected void articleClickedOnPosition(HSKBItem kbItemClicked) { if(kbItemClicked.getArticleType() == HSKBItem.TYPE_ARTICLE) { HSActivityManager.startArticleActivity(this, kbItemClicked, REQUEST_CODE_NEW_TICKET); - - } else { + } + else { HSActivityManager.startSectionActivity(this, kbItemClicked, REQUEST_CODE_NEW_TICKET); } } @@ -231,11 +221,9 @@ public void setKbArticles(HSKBItem[] fetchedKbItems) { @Override public int getCount() { - if (kbItems == null) { return 0; } - return this.kbItems.length; } @@ -251,20 +239,19 @@ public long getItemId(int position) { @Override public View getView(int position, View convertView, ViewGroup parent) { - ViewHolder holder = null; - + if(convertView == null) { holder = new ViewHolder(); LayoutInflater inflater = getActivity().getLayoutInflater(); convertView = inflater.inflate(R.layout.hs_sectionlist_article, null); holder.title = (TextView)convertView.findViewById(R.id.sectionlisttextview); convertView.setTag(holder); - }else { + } + else { holder = (ViewHolder)convertView.getTag(); } - - holder.title.setText(((HSKBItem)getItem(position)).getSubject()); + holder.title.setText(((HSKBItem)getItem(position)).getSubject()); return convertView; } diff --git a/helpstack/src/com/tenmiles/helpstack/gears/HSDeskGear.java b/helpstack/src/com/tenmiles/helpstack/gears/HSDeskGear.java index 9dffcc9..8262222 100644 --- a/helpstack/src/com/tenmiles/helpstack/gears/HSDeskGear.java +++ b/helpstack/src/com/tenmiles/helpstack/gears/HSDeskGear.java @@ -61,7 +61,6 @@ import static com.tenmiles.helpstack.model.HSUser.createNewUserWithDetails; - public class HSDeskGear extends HSGear { private String instanceUrl; @@ -85,7 +84,6 @@ public void fetchKBArticle(String cancelTag, HSKBItem section, RequestQueue queu OnFetchedArraySuccessListener successListener, Response.ErrorListener errorListener) { if (section == null) { - // String url = getApiUrl().concat("topics"); DeskJsonObjectRequest request = new DeskJsonObjectRequest(cancelTag, url, new DeskArrayBaseListener(successListener, errorListener) { @@ -108,7 +106,6 @@ public void onResponse(JSONObject sectionsArray) { } else { // Fetch articles under that section. - DeskJsonObjectRequest request = new DeskJsonObjectRequest(cancelTag, section.getId(), null, new DeskArrayBaseListener(successListener, errorListener) { @Override @@ -125,19 +122,17 @@ public void onResponse(JSONObject sectionsObject) { }, errorListener); addRequestAndStartQueue(queue, request); - - } } @Override - public void registerNewUser(final String cancelTag, final String firstName, final String lastname, - final String emailAddress, final RequestQueue queue,OnFetchedSuccessListener successListener, - Response.ErrorListener errorListener) { + public void registerNewUser(final String cancelTag, final String firstName, final String lastname, final String emailAddress, final RequestQueue queue, + OnFetchedSuccessListener successListener, Response.ErrorListener errorListener) { HSUser user = createNewUserWithDetails(firstName, lastname, emailAddress); - DeskJsonObjectRequest request = new DeskJsonObjectRequest(cancelTag, getApiUrl().concat("customers/search?email=").concat(user.getEmail()), new CreateNewUserSuccessListener(user, successListener, errorListener) { + DeskJsonObjectRequest request = new DeskJsonObjectRequest(cancelTag, getApiUrl().concat("customers/search?email=").concat(user.getEmail()), + new CreateNewUserSuccessListener(user, successListener, errorListener) { @Override public void onResponse(JSONObject responseObject) { @@ -152,7 +147,6 @@ public void onResponse(JSONObject responseObject) { if (totalEntries >= 1) { try { - JSONObject validUserDetail = null; JSONArray couldBeValidUsersArray = responseObject.getJSONObject("_embedded").getJSONArray("entries"); @@ -178,7 +172,6 @@ public void onResponse(JSONObject responseObject) { } if (validUserDetail != null) { - String firstName = validUserDetail.getString("first_name"); String lastName = validUserDetail.getString("last_name"); String email = validUserDetail.getJSONArray("emails").getJSONObject(0).getString("value"); @@ -217,7 +210,6 @@ public void onResponse(JSONObject responseObject) { @Override public void onResponse(JSONObject responseObject) { - String firstName; String lastName; String apiHref; @@ -229,7 +221,6 @@ public void onResponse(JSONObject responseObject) { firstName = responseObject.getString("first_name"); lastName = responseObject.getString("last_name"); apiHref = responseObject.getJSONObject("_links").getJSONObject("self").getString("href"); - emailsArray = responseObject.getJSONArray("emails"); int eventsArrayLength = emailsArray.length(); @@ -263,8 +254,7 @@ public void onResponse(JSONObject responseObject) { @Override public void createNewTicket(final String cancelTag, HSUser user, String message, String body, final HSUploadAttachment[] attachments, final RequestQueue queue, - OnNewTicketFetchedSuccessListener successListener, - Response.ErrorListener errorListener) { + OnNewTicketFetchedSuccessListener successListener, Response.ErrorListener errorListener) { JSONObject ticketJson = null; try { @@ -275,7 +265,8 @@ public void createNewTicket(final String cancelTag, HSUser user, String message, return; } - DeskJsonObjectRequest request = new DeskJsonObjectRequest(cancelTag, getApiUrl().concat("cases"), ticketJson, new CreateNewTicketSuccessListener(user, successListener, errorListener) { + DeskJsonObjectRequest request = new DeskJsonObjectRequest(cancelTag, getApiUrl().concat("cases"), ticketJson, + new CreateNewTicketSuccessListener(user, successListener, errorListener) { @Override public void onResponse(JSONObject response) { @@ -291,7 +282,6 @@ public void onResponse(JSONObject response) { if (attachments != null && attachments.length > 0) { HSUploadAttachment attachmentObject = attachments[0]; // We are handling the number of attachments in constructor - uploadAttachmentToServer(cancelTag, caseIdHref, attachmentObject, queue, new Response.Listener() { @Override public void onResponse(JSONObject jsonObject) { @@ -330,7 +320,6 @@ public void onResponse(JSONObject responseObject) { String content = responseObject.getString("body"); String from = responseObject.getString("from"); - final Date update_time = parseTime(responseObject.getString("updated_at")); HSTicketUpdate originalMessage = HSTicketUpdate.createUpdateByUser(ticket.getTicketId(), from, content, update_time, null); @@ -405,8 +394,8 @@ public void onResponse(JSONObject repliesObject) { } @Override - public void addReplyOnATicket(final String cancelTag, final String message, final HSUploadAttachment[] attachments, final HSTicket ticket, final HSUser user, - final RequestQueue queue, final OnFetchedSuccessListener successListener, Response.ErrorListener errorListener) { + public void addReplyOnATicket(final String cancelTag, final String message, final HSUploadAttachment[] attachments, final HSTicket ticket, final HSUser user, final RequestQueue queue, + final OnFetchedSuccessListener successListener, Response.ErrorListener errorListener) { JSONObject replyJson = null; try { @@ -421,7 +410,6 @@ public void addReplyOnATicket(final String cancelTag, final String message, fina @Override public void onResponse(JSONObject responseObject) { - String content = null; String userName = null; Date update_time = null; @@ -444,7 +432,6 @@ public void onResponse(JSONObject responseObject) { if (attachments != null && attachments.length > 0) { HSUploadAttachment attachmentObject = attachments[0]; // We are handling the number of attachments in constructor - uploadAttachmentToServer(cancelTag, ticket.getApiHref(), attachmentObject, queue, new Response.Listener() { @Override public void onResponse(JSONObject jsonObject) { @@ -456,9 +443,6 @@ public void onResponse(JSONObject jsonObject) { else { successListener.onSuccess(userReply); } - - - } catch (JSONException e) { e.printStackTrace(); errorListener.onErrorResponse(new VolleyError("Error when parsing replies")); @@ -486,7 +470,8 @@ private void addRequestAndStartQueue(RequestQueue queue, DeskJsonObjectRequest r queue.start(); } - private void uploadAttachmentToServer(String cancelTag, String caseId, HSUploadAttachment attachmentObject, RequestQueue queue, Response.Listener successListener, Response.ErrorListener errorListener) throws JSONException { + private void uploadAttachmentToServer(String cancelTag, String caseId, HSUploadAttachment attachmentObject, RequestQueue queue, + Response.Listener successListener, Response.ErrorListener errorListener) throws JSONException { Uri.Builder builder = new Uri.Builder(); builder.encodedPath(instanceUrl); @@ -494,10 +479,9 @@ private void uploadAttachmentToServer(String cancelTag, String caseId, HSUpload builder.appendEncodedPath("attachments"); String attachmentUrl = builder.build().toString(); - - String attachmentFileName = attachmentObject.getAttachment().getFileName() == null ? "picture":attachmentObject.getAttachment().getFileName(); - String attachmentMimeType = attachmentObject.getAttachment().getMime_type(); + String attachmentMimeType = attachmentObject.getAttachment().getMimeType(); + try { JSONObject attachmentPostObject = new JSONObject(); @@ -518,8 +502,6 @@ private void uploadAttachmentToServer(String cancelTag, String caseId, HSUpload attachmentPostObject.put("content_type", attachmentMimeType); attachmentPostObject.put("file_name", attachmentFileName); - - DeskJsonObjectRequest attachmentRequest = new DeskJsonObjectRequest(cancelTag, attachmentUrl, attachmentPostObject, successListener, errorListener); @@ -530,8 +512,6 @@ private void uploadAttachmentToServer(String cancelTag, String caseId, HSUpload } } - - private String retrieveSectionId(String href) throws JSONException { // href will be of the form: /api/v2/topic/
//
will therefore be the text after the last / @@ -576,7 +556,6 @@ private HSKBItem[] readSectionsFromEntries(JSONArray sectionsArray) throws JSONE } private JSONObject retrieveTicketProperties(HSUser user, String body, String message) throws JSONException { - JSONObject messageFields = new JSONObject(); JSONObject customerLinks = new JSONObject(); JSONObject customerParameter = new JSONObject(); @@ -598,17 +577,14 @@ private JSONObject retrieveTicketProperties(HSUser user, String body, String mes params.put("_links", customerParameter); params.put("message", messageFields); - return params; } private JSONObject createUserReply(String message, String email) throws JSONException { JSONObject userReply = new JSONObject(); - userReply.put("direction", "in"); userReply.put("body", message); userReply.put("to", email); - return userReply; } @@ -637,29 +613,23 @@ private static Date parseUTCString(String timeStr, String pattern) throws ParseE } private abstract class DeskArrayBaseListener implements Response.Listener { - protected OnFetchedArraySuccessListener successListener; protected Response.ErrorListener errorListener; - public DeskArrayBaseListener(OnFetchedArraySuccessListener successListener, - Response.ErrorListener errorListener) { + public DeskArrayBaseListener(OnFetchedArraySuccessListener successListener, Response.ErrorListener errorListener) { this.successListener = successListener; this.errorListener = errorListener; } - } private abstract class DeskBaseListener implements Response.Listener { - protected OnFetchedSuccessListener successListener; protected Response.ErrorListener errorListener; - public DeskBaseListener(OnFetchedSuccessListener successListener, - Response.ErrorListener errorListener) { + public DeskBaseListener(OnFetchedSuccessListener successListener, Response.ErrorListener errorListener) { this.successListener = successListener; this.errorListener = errorListener; } - } private class DeskJsonObjectRequest extends JsonObjectRequest { @@ -703,18 +673,14 @@ public void addCredential(String name, String password) { public Map getHeaders() throws AuthFailureError { return headers; } - } - private abstract class CreateNewTicketSuccessListener implements Response.Listener - { - + private abstract class CreateNewTicketSuccessListener implements Response.Listener { protected HSUser user; protected OnNewTicketFetchedSuccessListener successListener; protected Response.ErrorListener errorListener; - public CreateNewTicketSuccessListener(HSUser user, OnNewTicketFetchedSuccessListener successListener, - Response.ErrorListener errorListener) { + public CreateNewTicketSuccessListener(HSUser user, OnNewTicketFetchedSuccessListener successListener, Response.ErrorListener errorListener) { this.user = user; this.successListener = successListener; this.errorListener = errorListener; @@ -722,13 +688,11 @@ public CreateNewTicketSuccessListener(HSUser user, OnNewTicketFetchedSuccessList } private abstract class CreateNewUserSuccessListener implements Response.Listener { - protected HSUser user; protected OnFetchedSuccessListener successListener; protected Response.ErrorListener errorListener; - public CreateNewUserSuccessListener(HSUser user, OnFetchedSuccessListener successListener, - Response.ErrorListener errorListener) { + public CreateNewUserSuccessListener(HSUser user, OnFetchedSuccessListener successListener, Response.ErrorListener errorListener) { this.user = user; this.successListener = successListener; this.errorListener = errorListener; diff --git a/helpstack/src/com/tenmiles/helpstack/gears/HSEmailGear.java b/helpstack/src/com/tenmiles/helpstack/gears/HSEmailGear.java index edeca73..c2a3c44 100644 --- a/helpstack/src/com/tenmiles/helpstack/gears/HSEmailGear.java +++ b/helpstack/src/com/tenmiles/helpstack/gears/HSEmailGear.java @@ -31,8 +31,7 @@ */ public class HSEmailGear extends HSGear { - public HSEmailGear(String supportEmailAddress, int localArticleResId) - { + public HSEmailGear(String supportEmailAddress, int localArticleResId) { setNotImplementingKBFetching(localArticleResId); setNotImplementingTicketsFetching(supportEmailAddress); } diff --git a/helpstack/src/com/tenmiles/helpstack/gears/HSHappyfoxGear.java b/helpstack/src/com/tenmiles/helpstack/gears/HSHappyfoxGear.java index 23e1b1c..12771b9 100644 --- a/helpstack/src/com/tenmiles/helpstack/gears/HSHappyfoxGear.java +++ b/helpstack/src/com/tenmiles/helpstack/gears/HSHappyfoxGear.java @@ -72,7 +72,6 @@ import java.util.Properties; import java.util.TimeZone; - public class HSHappyfoxGear extends HSGear { private static final String TAG = HSHappyfoxGear.class.getSimpleName(); @@ -106,8 +105,7 @@ public HSHappyfoxGear(String instanceUrl, String api_key, String auth_code, Stri // If user taps on a section, then section is send as a paremeter to the function @Override - public void fetchKBArticle(String cancelTag, HSKBItem section, RequestQueue queue, - OnFetchedArraySuccessListener success, ErrorListener errorListener) { + public void fetchKBArticle(String cancelTag, HSKBItem section, RequestQueue queue, OnFetchedArraySuccessListener success, ErrorListener errorListener) { if (section == null) { // This is first request of sections @@ -126,10 +124,9 @@ public void onResponse(JSONArray sectionsArray) { }, errorListener); // to avoid server overload call - request.setRetryPolicy(new DefaultRetryPolicy(TicketFormRequest.TIMEOUT_MS, - TicketFormRequest.MAX_RETRIES, TicketFormRequest.BACKOFF_MULT)); + request.setRetryPolicy(new DefaultRetryPolicy(TicketFormRequest.TIMEOUT_MS, TicketFormRequest.MAX_RETRIES, TicketFormRequest.BACKOFF_MULT)); + request.setTag(cancelTag); - request.setTag(cancelTag); queue.add(request); queue.start(); } @@ -152,10 +149,9 @@ public void onResponse(JSONObject sectionsArray) { }, errorListener); // to avoid server overload call - request.setRetryPolicy(new DefaultRetryPolicy(TicketFormRequest.TIMEOUT_MS, - TicketFormRequest.MAX_RETRIES, TicketFormRequest.BACKOFF_MULT)); + request.setRetryPolicy(new DefaultRetryPolicy(TicketFormRequest.TIMEOUT_MS, TicketFormRequest.MAX_RETRIES, TicketFormRequest.BACKOFF_MULT)); + request.setTag(cancelTag); - request.setTag(cancelTag); queue.add(request); queue.start(); } @@ -187,20 +183,16 @@ public void onResponse(JSONObject sectionsArray) { } @Override - public void registerNewUser(String cancelTag, String firstName, String lastname, - String emailAddress, RequestQueue queue,OnFetchedSuccessListener success, - ErrorListener error) { + public void registerNewUser(String cancelTag, String firstName, String lastname, String emailAddress, RequestQueue queue, + OnFetchedSuccessListener success, ErrorListener error) { HSUser user = HSUser.createNewUserWithDetails(firstName, lastname, emailAddress); success.onSuccess(user); - } @Override public void createNewTicket(String cancelTag, HSUser user, String message, String body, HSUploadAttachment[] attachments, RequestQueue queue, - OnNewTicketFetchedSuccessListener successListener, - ErrorListener errorListener) { - + OnNewTicketFetchedSuccessListener successListener, ErrorListener errorListener) { Properties prop = new Properties(); prop.put("name", user.getFullName()); @@ -210,8 +202,6 @@ public void createNewTicket(String cancelTag, HSUser user, String message, Strin prop.put("subject", message); prop.put("text", body); - - TicketFormRequest request = new TicketFormRequest(getApiUrl()+"new_ticket/", prop, attachments, new CreateNewTicketSuccessListener(user, successListener, errorListener) { @Override @@ -225,7 +215,6 @@ public void onResponse(JSONObject response) { e.printStackTrace(); this.errorListener.onErrorResponse(new VolleyError("Parsing failed when creating a ticket")); } - } }, errorListener); @@ -281,25 +270,20 @@ public void onResponse(JSONObject response) { } @Override - public void addReplyOnATicket(String cancelTag, String message, HSUploadAttachment[] attachments, HSTicket ticket, HSUser user, - RequestQueue queue, OnFetchedSuccessListener success, - ErrorListener errorListener) { + public void addReplyOnATicket(String cancelTag, String message, HSUploadAttachment[] attachments, HSTicket ticket, HSUser user, RequestQueue queue, + OnFetchedSuccessListener success, ErrorListener errorListener) { Properties prop = new Properties(); prop.put("user", user.getUserId()); prop.put("text", message); - TicketFormRequest request = new TicketFormRequest( - getApiUrl()+"ticket/" + ticket.getTicketId() + "/user_reply/", - prop, - attachments, + TicketFormRequest request = new TicketFormRequest(getApiUrl()+"ticket/" + ticket.getTicketId() + "/user_reply/", prop, attachments, new HappyfoxBaseListner(success, errorListener) { @Override public void onResponse(JSONObject response) { try { - HSTicketUpdate update = null; // fetch last message from user in update array. JSONArray updateArray = response.getJSONArray("updates"); @@ -330,8 +314,6 @@ public void onResponse(JSONObject response) { this.successCallback.onSuccess(update); } - - } catch (JSONException e) { e.printStackTrace(); this.errorListener.onErrorResponse(new VolleyError("Parsing failed when adding reply to a ticket")); @@ -345,7 +327,6 @@ public void onResponse(JSONObject response) { queue.add(request); queue.start(); - } public void setSectionId(String sectionId) { @@ -482,12 +463,10 @@ private abstract class HappyfoxArrayBaseListener implements Listener { protected OnFetchedArraySuccessListener successCallback; protected ErrorListener errorListener; - public HappyfoxArrayBaseListener(OnFetchedArraySuccessListener success, - ErrorListener errorListener) { + public HappyfoxArrayBaseListener(OnFetchedArraySuccessListener success, ErrorListener errorListener) { this.successCallback = success; this.errorListener = errorListener; } - } private abstract class HappyfoxBaseListner implements Listener { @@ -495,16 +474,13 @@ private abstract class HappyfoxBaseListner implements Listener { protected OnFetchedSuccessListener successCallback; protected ErrorListener errorListener; - public HappyfoxBaseListner(OnFetchedSuccessListener success, - ErrorListener errorListener) { + public HappyfoxBaseListner(OnFetchedSuccessListener success, ErrorListener errorListener) { this.successCallback = success; this.errorListener = errorListener; } - } - private abstract class CreateNewTicketSuccessListener implements Listener - { + private abstract class CreateNewTicketSuccessListener implements Listener { protected HSUser user; protected OnNewTicketFetchedSuccessListener successListener; @@ -518,8 +494,6 @@ public CreateNewTicketSuccessListener(HSUser user, OnNewTicketFetchedSuccessList } } - - private class TicketFormRequest extends Request { /** Socket timeout in milliseconds for image requests */ @@ -537,8 +511,8 @@ private class TicketFormRequest extends Request { HashMap headers = new HashMap(); - public TicketFormRequest(String url, Properties requestProperties, HSUploadAttachment[] attachments_to_upload, Listener listener, - ErrorListener errorListener) { + public TicketFormRequest(String url, Properties requestProperties, HSUploadAttachment[] attachments_to_upload, + Listener listener, ErrorListener errorListener) { super(Method.POST, url, errorListener); mListener = listener; @@ -570,15 +544,12 @@ public TicketFormRequest(String url, Properties requestProperties, HSUploadAttac } } } - } - public TicketFormRequest(String url, Listener listener, - ErrorListener errorListener) { + public TicketFormRequest(String url, Listener listener, ErrorListener errorListener) { super(Method.GET, url, errorListener); mListener = listener; - setRetryPolicy( - new DefaultRetryPolicy(TIMEOUT_MS, MAX_RETRIES, BACKOFF_MULT)); + setRetryPolicy(new DefaultRetryPolicy(TIMEOUT_MS, MAX_RETRIES, BACKOFF_MULT)); } @Override @@ -597,12 +568,9 @@ public byte[] getBody() throws AuthFailureError return super.getBody(); } ByteArrayOutputStream bos = new ByteArrayOutputStream(); - try - { + try { entity.writeTo(bos); - } - catch (IOException e) - { + } catch (IOException e) { VolleyLog.e("IOException writing to ByteArrayOutputStream"); } return bos.toByteArray(); diff --git a/helpstack/src/com/tenmiles/helpstack/gears/HSZendeskGear.java b/helpstack/src/com/tenmiles/helpstack/gears/HSZendeskGear.java index 949c9c6..eb0cfca 100644 --- a/helpstack/src/com/tenmiles/helpstack/gears/HSZendeskGear.java +++ b/helpstack/src/com/tenmiles/helpstack/gears/HSZendeskGear.java @@ -113,8 +113,7 @@ public void onResponse(JSONObject sectionsArray) { }, errorListener); request.setTag(cancelTag); - request.setRetryPolicy(new DefaultRetryPolicy(ZendeskJsonObjectRequest.TIMEOUT_MS, - ZendeskJsonObjectRequest.MAX_RETRIES, ZendeskJsonObjectRequest.BACKOFF_MULT)); + request.setRetryPolicy(new DefaultRetryPolicy(ZendeskJsonObjectRequest.TIMEOUT_MS, ZendeskJsonObjectRequest.MAX_RETRIES, ZendeskJsonObjectRequest.BACKOFF_MULT)); queue.add(request); queue.start(); @@ -130,8 +129,7 @@ public void onResponse(JSONObject sectionsArray) { @Override public void createNewTicket(String cancelTag, HSUser user, String message, String body, HSUploadAttachment[] attachments, RequestQueue queue, - OnNewTicketFetchedSuccessListener successListener, - ErrorListener errorListener) { + OnNewTicketFetchedSuccessListener successListener, ErrorListener errorListener) { if (attachments != null && attachments.length > 0) { createNewTicketWithAttachment(cancelTag, user, message, body, attachments, queue, successListener, errorListener); @@ -197,8 +195,6 @@ public void addReplyOnATicket(final String cancelTag, final String message, fina } } - - public void setSectionId(String section_id) { this.section_id = section_id; } @@ -239,8 +235,7 @@ public void onResponse(JSONObject jsonObject) { attachmentRequest.addCredential(staff_email_address, api_token); attachmentRequest.setTag(cancelTag); - attachmentRequest.setRetryPolicy(new DefaultRetryPolicy(ZendeskJsonObjectRequest.TIMEOUT_MS, - ZendeskJsonObjectRequest.MAX_RETRIES, ZendeskJsonObjectRequest.BACKOFF_MULT)); + attachmentRequest.setRetryPolicy(new DefaultRetryPolicy(ZendeskJsonObjectRequest.TIMEOUT_MS, ZendeskJsonObjectRequest.MAX_RETRIES, ZendeskJsonObjectRequest.BACKOFF_MULT)); queue.add(attachmentRequest); queue.start(); @@ -303,7 +298,6 @@ public void onResponse(JSONObject jsonObject) { String[] attachmentTokenList = new String[1]; // It is been specified in constructor, so hard-coding the value. Can be changed later attachmentTokenList[0] = attachmentToken; - HSAttachment[] attachmentObjectList = new HSAttachment[1]; // It is been specified in constructor, so hard-coding the value. Can be changed later attachmentObjectList[0] = attachmentObject.getAttachment(); @@ -317,8 +311,7 @@ public void onResponse(JSONObject jsonObject) { attachmentRequest.addCredential(staff_email_address, api_token); attachmentRequest.setTag(cancelTag); - attachmentRequest.setRetryPolicy(new DefaultRetryPolicy(ZendeskJsonObjectRequest.TIMEOUT_MS, - ZendeskJsonObjectRequest.MAX_RETRIES, ZendeskJsonObjectRequest.BACKOFF_MULT)); + attachmentRequest.setRetryPolicy(new DefaultRetryPolicy(ZendeskJsonObjectRequest.TIMEOUT_MS, ZendeskJsonObjectRequest.MAX_RETRIES, ZendeskJsonObjectRequest.BACKOFF_MULT)); queue.add(attachmentRequest); queue.start(); @@ -339,8 +332,8 @@ private void addReplyToTicket(String cancelTag, HSTicket ticket, HSUser user, fi } ZendeskJsonObjectRequest request = new ZendeskJsonObjectRequest(cancelTag, user.getEmail(), Request.Method.PUT, - getApiUrl().concat("requests/").concat(ticket.getTicketId()).concat(".json"), - ticketJson, new ZendeskBaseListener(successListener, errorListener) { + getApiUrl().concat("requests/").concat(ticket.getTicketId()).concat(".json"), ticketJson, + new ZendeskBaseListener(successListener, errorListener) { @Override public void onResponse(JSONObject response) { @@ -432,7 +425,6 @@ private JSONObject retrieveRequestProperties(String body, String[] attachmentTok } requestProperties.put("comment", comment); - requestObject.put("request", requestProperties); return requestObject; @@ -490,8 +482,6 @@ private HSTicketUpdate retrieveTicketUpdate(JSONObject updateObject, JSONArray u isUpdateTypeUserReply = true; } } - - if (!updateObject.isNull("created_at")) { update_time = parseTime(updateObject.getString("created_at")); @@ -512,8 +502,7 @@ private HSTicketUpdate retrieveTicketUpdate(JSONObject updateObject, JSONArray u } attachments = attachmentArray.toArray(new HSAttachment[length]); } - - + break; } } diff --git a/helpstack/src/com/tenmiles/helpstack/helper/HSBaseExpandableListAdapter.java b/helpstack/src/com/tenmiles/helpstack/helper/HSBaseExpandableListAdapter.java index f0810f7..35a8511 100644 --- a/helpstack/src/com/tenmiles/helpstack/helper/HSBaseExpandableListAdapter.java +++ b/helpstack/src/com/tenmiles/helpstack/helper/HSBaseExpandableListAdapter.java @@ -22,8 +22,6 @@ package com.tenmiles.helpstack.helper; -import java.util.ArrayList; - import android.content.Context; import android.util.SparseArray; import android.view.LayoutInflater; @@ -31,6 +29,8 @@ import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; +import java.util.ArrayList; + /** * * This is simple adapter that helps in storing Parent and Child value, @@ -43,7 +43,7 @@ */ public abstract class HSBaseExpandableListAdapter extends BaseExpandableListAdapter { - ArrayList childrens = new ArrayList(); + ArrayList children = new ArrayList(); SparseArray groups = new SparseArray(); protected final LayoutInflater mLayoutInflater; @@ -67,7 +67,7 @@ public void notifyDataSetChanged() { } public void clearAll() { - childrens.clear(); + children.clear(); groups.clear(); } @@ -80,15 +80,15 @@ public void clearParent(int parentId) { // Please note the value of the previous parent will be overridden public void addParent(int parentId, Object parent) { assert parent!=null; - Parent parentholder = new Parent(); - parentholder.id = parentId; - parentholder.parent = parent; - groups.put(parentId, parentholder); + Parent parentHolder = new Parent(); + parentHolder.id = parentId; + parentHolder.parent = parent; + groups.put(parentId, parentHolder); } public void addChild(int parentId, Object child) { - childrens.add(child); - int pos = childrens.indexOf(child); + children.add(child); + int pos = children.indexOf(child); groups.get(parentId).childs.add(pos); } @@ -101,7 +101,7 @@ public void addChildAll(int parentId, ArrayList child) { @Override public Object getChild(int groupPosition, int childPosition) { int childPos = groups.valueAt(groupPosition).childs.get(childPosition); - return childrens.get(childPos); + return children.get(childPos); } @Override @@ -156,51 +156,50 @@ public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } -//Listeners - - protected OnChildItemClickListener childlistener; - protected OnParentItemClickListener parentlistener; + //Listeners + protected OnChildItemClickListener childListener; + protected OnParentItemClickListener parentListener; protected void sendChildClickEvent(int groupPosition, int childPosition,String type, Object map) { - if(childlistener!=null) { - childlistener.onChildListItemClick(groupPosition,childPosition,type,map); + if(childListener!=null) { + childListener.onChildListItemClick(groupPosition, childPosition, type, map); } } protected void sendParentItemClickEvent(int groupPosition,String type, Object obj) { - if(parentlistener!=null) { - parentlistener.onParentItemClicked(groupPosition,type,obj); + if(parentListener!=null) { + parentListener.onParentItemClicked(groupPosition, type, obj); } } protected boolean sendChildLongClickEvent(int groupPosition, int childPosition,String type, Object map) { - if(childlistener!=null) { - return childlistener.onChildListItemLongClick(groupPosition,childPosition,type, map); + if(childListener!=null) { + return childListener.onChildListItemLongClick(groupPosition,childPosition,type, map); } return false; } protected void sendChildCheckedEvent(int groupPosition, int childPosition,String type,Object map,boolean checked) { - if(childlistener!=null) { - childlistener.onChildCheckedListner(groupPosition,childPosition,type, map,checked); + if(childListener!=null) { + childListener.onChildCheckedListener(groupPosition, childPosition, type, map, checked); } } public void setOnChildItemClickListener(OnChildItemClickListener listener) { - this.childlistener = listener; + this.childListener = listener; } public void setOnParentItemClickListener(OnParentItemClickListener listener) { - this.parentlistener = listener; + this.parentListener = listener; } public interface OnChildItemClickListener { void onChildListItemClick(int groupPosition, int childPosition,String type,Object map); - void onChildCheckedListner(int groupPosition, int childPosition,String type,Object map,boolean checked); - boolean onChildListItemLongClick(int groupPosition, int childPosition,String type,Object map); + void onChildCheckedListener(int groupPosition, int childPosition, String type, Object map, boolean checked); + boolean onChildListItemLongClick(int groupPosition, int childPosition, String type, Object map); } public interface OnParentItemClickListener { - void onParentItemClicked(int groupPosition,String type, Object obj); + void onParentItemClicked(int groupPosition, String type, Object obj); } } diff --git a/helpstack/src/com/tenmiles/helpstack/logic/HSArticleReader.java b/helpstack/src/com/tenmiles/helpstack/logic/HSArticleReader.java index d42843f..ea3ede4 100644 --- a/helpstack/src/com/tenmiles/helpstack/logic/HSArticleReader.java +++ b/helpstack/src/com/tenmiles/helpstack/logic/HSArticleReader.java @@ -46,41 +46,38 @@ public HSArticleReader(int articlesResourceId) { } public HSKBItem[] readArticlesFromResource(Context context) throws XmlPullParserException, IOException { - ArrayList articles = new ArrayList(); - XmlPullParser xpp = context.getResources().getXml(articleResourceId); + ArrayList articles = new ArrayList(); + XmlPullParser xpp = context.getResources().getXml(articleResourceId); - while (xpp.getEventType()!=XmlPullParser.END_DOCUMENT) { - if (xpp.getEventType()==XmlPullParser.START_TAG) { - - if (xpp.getName().equals("article")) { - - int attributeCount = xpp.getAttributeCount(); - String subject = null; - String text = null; - for (int i = 0; i < attributeCount; i++) { - String attrName = xpp.getAttributeName(i); - if (attrName.equals("subject")) { - subject = xpp.getAttributeValue(i); - } - if (attrName.equals("text")) { - text = xpp.getAttributeValue(i); - } - } - - assert subject != null : "Subject was not specified in xml for article @ index "+articles.size()+1; - assert text != null : "Text was not specified in xml for article @ index "+articles.size()+1; - articles.add(new HSKBItem(null, subject, text)); - - } - } + while (xpp.getEventType()!=XmlPullParser.END_DOCUMENT) { + if (xpp.getEventType()==XmlPullParser.START_TAG) { + if (xpp.getName().equals("article")) { + int attributeCount = xpp.getAttributeCount(); + String subject = null; + String text = null; - xpp.next(); - } - - HSKBItem[] articleArray = new HSKBItem[0]; - articleArray = articles.toArray(articleArray); - return articleArray; + for (int i = 0; i < attributeCount; i++) { + String attrName = xpp.getAttributeName(i); + if (attrName.equals("subject")) { + subject = xpp.getAttributeValue(i); + } + if (attrName.equals("text")) { + text = xpp.getAttributeValue(i); + } + } + + assert subject != null : "Subject was not specified in xml for article @ index "+articles.size()+1; + assert text != null : "Text was not specified in xml for article @ index "+articles.size()+1; + articles.add(new HSKBItem(null, subject, text)); + } + } + + xpp.next(); + } + + HSKBItem[] articleArray = new HSKBItem[0]; + articleArray = articles.toArray(articleArray); + return articleArray; } - } diff --git a/helpstack/src/com/tenmiles/helpstack/logic/HSGear.java b/helpstack/src/com/tenmiles/helpstack/logic/HSGear.java index 028f63a..025949b 100644 --- a/helpstack/src/com/tenmiles/helpstack/logic/HSGear.java +++ b/helpstack/src/com/tenmiles/helpstack/logic/HSGear.java @@ -48,8 +48,7 @@ public HSGear() { * @param success Success listener * @param errorListener Error listener */ - public void fetchKBArticle(String cancelTag, HSKBItem section, RequestQueue queue, OnFetchedArraySuccessListener success, ErrorListener errorListener ) - { + public void fetchKBArticle(String cancelTag, HSKBItem section, RequestQueue queue, OnFetchedArraySuccessListener success, ErrorListener errorListener ) { errorListener.onErrorResponse(new VolleyError("Not implemented method")); } @@ -63,8 +62,7 @@ public void fetchKBArticle(String cancelTag, HSKBItem section, RequestQueue queu * @param success Success Listener * @param errorListener Error Listener */ - public void registerNewUser(String cancelTag, String firstName, String lastname, String emailAddress, RequestQueue queue, OnFetchedSuccessListener success, ErrorListener errorListener) - { + public void registerNewUser(String cancelTag, String firstName, String lastname, String emailAddress, RequestQueue queue, OnFetchedSuccessListener success, ErrorListener errorListener) { success.onSuccess(HSUser.createNewUserWithDetails(firstName, lastname, emailAddress)); } @@ -78,7 +76,7 @@ public void registerNewUser(String cancelTag, String firstName, String lastname, * @param successListener Success Listener * @param errorListener Error Listener */ - public void createNewTicket(String cancelTag, HSUser user, String subject, String body, HSUploadAttachment[] attachments, RequestQueue queue, OnNewTicketFetchedSuccessListener successListener, ErrorListener errorListener ) { + public void createNewTicket(String cancelTag, HSUser user, String subject, String body, HSUploadAttachment[] attachments, RequestQueue queue, OnNewTicketFetchedSuccessListener successListener, ErrorListener errorListener) { errorListener.onErrorResponse(new VolleyError("Not implemented method")); } @@ -91,8 +89,7 @@ public void createNewTicket(String cancelTag, HSUser user, String subject, Strin * @param success Success Listener * @param errorListener Error Listener */ - public void fetchAllUpdateOnTicket(String cancelTag, HSTicket ticket, HSUser user, RequestQueue queue, OnFetchedArraySuccessListener success, ErrorListener errorListener) - { + public void fetchAllUpdateOnTicket(String cancelTag, HSTicket ticket, HSUser user, RequestQueue queue, OnFetchedArraySuccessListener success, ErrorListener errorListener) { errorListener.onErrorResponse(new VolleyError("Not implemented method")); } @@ -187,11 +184,10 @@ public void uploadMessageAsHtmlString(boolean htmlEnabled) { * Default: false * */ - public boolean canUplaodMessageAsHtmlString() { + public boolean canUploadMessageAsHtmlString() { return supportHtmlMessage; } - /** * * Sets maximum number of attachment gears can handle. @@ -254,5 +250,4 @@ public boolean canIgnoreTicketUpdateInformationAfterAddingReply() { private boolean ignoreTicketUpdateInformationAfterAddingReply = false; - } diff --git a/helpstack/src/com/tenmiles/helpstack/logic/HSSource.java b/helpstack/src/com/tenmiles/helpstack/logic/HSSource.java index 0c4ac76..7f6b047 100644 --- a/helpstack/src/com/tenmiles/helpstack/logic/HSSource.java +++ b/helpstack/src/com/tenmiles/helpstack/logic/HSSource.java @@ -39,9 +39,9 @@ import com.tenmiles.helpstack.activities.HSActivityManager; import com.tenmiles.helpstack.fragments.HSFragmentParent; import com.tenmiles.helpstack.model.HSAttachment; -import com.tenmiles.helpstack.model.HSDraft; import com.tenmiles.helpstack.model.HSCachedTicket; import com.tenmiles.helpstack.model.HSCachedUser; +import com.tenmiles.helpstack.model.HSDraft; import com.tenmiles.helpstack.model.HSKBItem; import com.tenmiles.helpstack.model.HSTicket; import com.tenmiles.helpstack.model.HSTicketUpdate; @@ -94,39 +94,32 @@ public static HSSource getInstance(Context context) { private HSGear gear; private Context mContext; private RequestQueue mRequestQueue; - private HSCachedTicket cachedTicket; private HSCachedUser cachedUser; - private HSDraft draftObject; private HSSource(Context context) { this.mContext = context; setGear(HSHelpStack.getInstance(context).getGear()); mRequestQueue = HSHelpStack.getInstance(context).getRequestQueue(); - refreshFieldsFromCache(); } - public void requestKBArticle(String cancelTag, HSKBItem section, OnFetchedArraySuccessListener success, ErrorListener errorListener ) { if (gear.haveImplementedKBFetching()) { - gear.fetchKBArticle(cancelTag, section,mRequestQueue, new SuccessWrapper(success) { - @Override + + @Override public void onSuccess(Object[] successObject) { - - assert successObject != null : "It seems requestKBArticle was not implemented in gear" ; + assert successObject != null : "It seems requestKBArticle was not implemented in gear" ; // Do your work here, may be caching, data validation etc. super.onSuccess(successObject); - } }, new ErrorWrapper("Fetching KB articles", errorListener)); } else { - try { HSArticleReader reader = new HSArticleReader(gear.getLocalArticleResourceId()); success.onSuccess(reader.readArticlesFromResource(mContext)); @@ -141,7 +134,6 @@ public void onSuccess(Object[] successObject) { } public void requestAllTickets(OnFetchedArraySuccessListener success, ErrorListener error ) { - if (cachedTicket == null) { success.onSuccess(new HSTicket[0]); } @@ -157,10 +149,9 @@ public void checkForUserDetailsValidity(String cancelTag, String firstName, Stri public void createNewTicket(String cancelTag, HSUser user, String subject, String message, HSAttachment[] attachment, OnNewTicketFetchedSuccessListener successListener, ErrorListener errorListener) { HSUploadAttachment[] upload_attachments = convertAttachmentArrayToUploadAttachment(attachment); - message = message + getDeviceInformation(mContext); - if (gear.canUplaodMessageAsHtmlString()) { + if (gear.canUploadMessageAsHtmlString()) { message = Html.toHtml(new SpannableString(message)); } @@ -185,7 +176,7 @@ public void requestAllUpdatesOnTicket(String cancelTag, HSTicket ticket, OnFetch public void addReplyOnATicket(String cancelTag, String message, HSAttachment[] attachments, HSTicket ticket, OnFetchedSuccessListener success, ErrorListener errorListener) { - if (gear.canUplaodMessageAsHtmlString()) { + if (gear.canUploadMessageAsHtmlString()) { message = Html.toHtml(new SpannableString(message)); } @@ -304,14 +295,14 @@ public void launchCreateNewTicketScreen(HSFragmentParent fragment, int requestCo if (haveImplementedTicketFetching()) { if(isNewUser()) { HSActivityManager.startNewIssueActivity(fragment, null, requestCode); - }else { + } + else { HSActivityManager.startNewIssueActivity(fragment, getUser(), requestCode); } } else { launchEmailAppWithEmailAddress(fragment.getActivity()); } - } public void launchEmailAppWithEmailAddress(Activity activity) { @@ -328,17 +319,17 @@ private static String getDeviceInformation(Context activity) { StringBuilder builder = new StringBuilder(); builder.append("\n\n\n"); builder.append("========"); - builder.append("\nDevice Android version : "); + builder.append("\nDevice brand: "); + builder.append(Build.MODEL); + builder.append("\nAndroid version: "); builder.append(Build.VERSION.SDK_INT); - builder.append("\nDevice brand : "); - builder.append(Build.MODEL); - builder.append("\nApplication package :"); + builder.append("\nApp package :"); try { builder.append(activity.getPackageManager().getPackageInfo(activity.getPackageName(),0).packageName); } catch (NameNotFoundException e) { builder.append("NA"); } - builder.append("\nApplication version :"); + builder.append("\nApp version :"); try { builder.append(activity.getPackageManager().getPackageInfo(activity.getPackageName(),0).versionCode); } catch (NameNotFoundException e) { @@ -352,7 +343,6 @@ public void cancelOperation(String cancelTag) { mRequestQueue.cancelAll(cancelTag); } - ///////////////////////////////////////////////// //////// Utility Functions ///////////////// ///////////////////////////////////////////////// @@ -381,16 +371,16 @@ private String readJsonFromFile(File file) { try { StringBuilder datax = new StringBuilder(); inputStream = new FileInputStream(file); - InputStreamReader isr = new InputStreamReader ( inputStream ) ; - BufferedReader buffreader = new BufferedReader ( isr ) ; + InputStreamReader isr = new InputStreamReader(inputStream); + BufferedReader bufferReader = new BufferedReader(isr); - String readString = buffreader.readLine ( ) ; - while ( readString != null ) { + String readString = bufferReader.readLine(); + while (readString != null) { datax.append(readString); - readString = buffreader.readLine ( ) ; + readString = bufferReader.readLine(); } - isr.close ( ) ; + isr.close(); json = datax.toString(); return json; @@ -416,37 +406,28 @@ private void writeJsonIntoFile (File file, String json) { } protected void doSaveNewTicketPropertiesForGearInCache(HSTicket ticket) { - - cachedTicket.addTicketAtStart(ticket); + cachedTicket.addTicketAtStart(ticket); Gson gson = new Gson(); String ticketsgson = gson.toJson(cachedTicket); - - - File ticketFile = new File(getProjectDirectory(), HELPSTACK_TICKETS_FILE_NAME); + File ticketFile = new File(getProjectDirectory(), HELPSTACK_TICKETS_FILE_NAME); writeJsonIntoFile(ticketFile, ticketsgson); - } protected void doSaveNewUserPropertiesForGearInCache(HSUser user) { - cachedUser.setUser(user); Gson gson = new Gson(); String userjson = gson.toJson(cachedUser); - - File userFile = new File(getProjectDirectory(), HELPSTACK_TICKETS_USER_DATA); + File userFile = new File(getProjectDirectory(), HELPSTACK_TICKETS_USER_DATA); writeJsonIntoFile(userFile, userjson); - } protected void doReadTicketsFromCache() { - File ticketFile = new File(getProjectDirectory(), HELPSTACK_TICKETS_FILE_NAME); - - String json = readJsonFromFile(ticketFile); + String json = readJsonFromFile(ticketFile); if (json == null) { cachedTicket = new HSCachedTicket(); @@ -457,13 +438,9 @@ protected void doReadTicketsFromCache() { } } - - - protected void doReadUserFromCache() { - - File userFile = new File(getProjectDirectory(), HELPSTACK_TICKETS_USER_DATA); - - String json = readJsonFromFile(userFile); + protected void doReadUserFromCache() { + File userFile = new File(getProjectDirectory(), HELPSTACK_TICKETS_USER_DATA); + String json = readJsonFromFile(userFile); if (json == null) { cachedUser = new HSCachedUser(); @@ -476,7 +453,6 @@ protected void doReadUserFromCache() { protected void doReadDraftFromCache() { File draftFile = new File(getProjectDirectory(), HELPSTACK_DRAFT); - String json = readJsonFromFile(draftFile); if (json == null) { @@ -497,7 +473,7 @@ protected void doSaveTicketDraftForGearInCache(String subject, String message, H } protected void doSaveUserDraftForGearInCache(HSUser user) { - draftObject.setDraftUSer(user); + draftObject.setDraftUser(user); writeDraftIntoFile(); } @@ -518,7 +494,6 @@ private void writeDraftIntoFile() { } protected File getProjectDirectory() { - File projDir = new File(mContext.getFilesDir(), HELPSTACK_DIRECTORY); if (!projDir.exists()) projDir.mkdirs(); @@ -534,21 +509,19 @@ public void clearReplyDraft() { saveReplyDetailsInDraft("", null); } - private class NewTicketSuccessWrapper implements OnNewTicketFetchedSuccessListener - { + private class NewTicketSuccessWrapper implements OnNewTicketFetchedSuccessListener { - private OnNewTicketFetchedSuccessListener lastListner; + private OnNewTicketFetchedSuccessListener lastListener; - public NewTicketSuccessWrapper(OnNewTicketFetchedSuccessListener lastListner) { - this.lastListner = lastListner; + public NewTicketSuccessWrapper(OnNewTicketFetchedSuccessListener lastListener) { + this.lastListener = lastListener; } @Override public void onSuccess(HSUser udpatedUserDetail, HSTicket ticket) { - if (lastListner != null) - lastListner.onSuccess(udpatedUserDetail, ticket); + if (lastListener != null) + lastListener.onSuccess(udpatedUserDetail, ticket); } - } protected HSUploadAttachment[] convertAttachmentArrayToUploadAttachment(HSAttachment[] attachment) { @@ -557,7 +530,7 @@ protected HSUploadAttachment[] convertAttachmentArrayToUploadAttachment(HSAttach if (attachment != null && attachment.length > 0) { int attachmentCount = gear.getNumberOfAttachmentGearCanHandle(); - assert attachmentCount >= attachment.length : "Gear cannot handle more than "+attachmentCount+" attachmnets"; + assert attachmentCount >= attachment.length : "Gear cannot handle more than "+attachmentCount+" attachments"; upload_attachments = new HSUploadAttachment[attachment.length]; for (int i = 0; i < upload_attachments.length; i++) { upload_attachments[i] = new HSUploadAttachment(mContext, attachment[i]); @@ -567,21 +540,19 @@ protected HSUploadAttachment[] convertAttachmentArrayToUploadAttachment(HSAttach return upload_attachments; } - private class SuccessWrapper implements OnFetchedArraySuccessListener - { + private class SuccessWrapper implements OnFetchedArraySuccessListener { - private OnFetchedArraySuccessListener lastListner; + private OnFetchedArraySuccessListener lastListener; - public SuccessWrapper(OnFetchedArraySuccessListener lastListner) { - this.lastListner = lastListner; + public SuccessWrapper(OnFetchedArraySuccessListener lastListener) { + this.lastListener = lastListener; } @Override public void onSuccess(Object[] successObject) { - if (lastListner != null) - lastListner.onSuccess(successObject); + if (lastListener != null) + lastListener.onSuccess(successObject); } - } private class OnFetchedSuccessListenerWrapper implements OnFetchedSuccessListener { @@ -596,7 +567,6 @@ private OnFetchedSuccessListenerWrapper(OnFetchedSuccessListener listener, Strin this.attachments = attachments; } - @Override public void onSuccess(Object successObject) { if (this.listener != null) { @@ -628,8 +598,7 @@ public static void throwError(ErrorListener errorListener, String error) { errorListener.onErrorResponse(volleyError); } - private static void printErrorDescription (String methodName, VolleyError error) - { + private static void printErrorDescription (String methodName, VolleyError error) { if (methodName == null) { Log.e(HSHelpStack.LOG_TAG, "Error occurred in HelpStack"); } diff --git a/helpstack/src/com/tenmiles/helpstack/logic/HSTestDataGear.java b/helpstack/src/com/tenmiles/helpstack/logic/HSTestDataGear.java index 3ba9101..2c007ee 100644 --- a/helpstack/src/com/tenmiles/helpstack/logic/HSTestDataGear.java +++ b/helpstack/src/com/tenmiles/helpstack/logic/HSTestDataGear.java @@ -22,8 +22,6 @@ package com.tenmiles.helpstack.logic; -import java.util.Calendar; - import com.android.volley.RequestQueue; import com.android.volley.Response.ErrorListener; import com.android.volley.VolleyError; @@ -33,8 +31,9 @@ import com.tenmiles.helpstack.model.HSUploadAttachment; import com.tenmiles.helpstack.model.HSUser; -public class HSTestDataGear extends HSGear -{ +import java.util.Calendar; + +public class HSTestDataGear extends HSGear { private String newTicketBody; private HSUploadAttachment[] newTicketattachment; @@ -44,18 +43,15 @@ public HSTestDataGear(int articleResId) { } @Override - public void registerNewUser(String cancelTag, String firstName, String lastname, - String emailAddress, RequestQueue queue, + public void registerNewUser(String cancelTag, String firstName, String lastName, String emailAddress, RequestQueue queue, OnFetchedSuccessListener success, ErrorListener errorListener) { - - success.onSuccess(HSUser.createNewUserWithDetails(firstName, lastname, emailAddress)); + + success.onSuccess(HSUser.createNewUserWithDetails(firstName, lastName, emailAddress)); } @Override - public void createNewTicket(String cancelTag, HSUser user, String message, String body, HSUploadAttachment[] attachment, - RequestQueue queue, - OnNewTicketFetchedSuccessListener successListener, - ErrorListener errorListener) { + public void createNewTicket(String cancelTag, HSUser user, String message, String body, HSUploadAttachment[] attachment, RequestQueue queue, + OnNewTicketFetchedSuccessListener successListener, ErrorListener errorListener) { this.newTicketBody = body; this.newTicketattachment = attachment; @@ -63,9 +59,9 @@ public void createNewTicket(String cancelTag, HSUser user, String message, Strin } @Override - public void addReplyOnATicket(String cancelTag, String message, HSUploadAttachment[] uploadattachments, HSTicket ticket, HSUser user, - RequestQueue queue, OnFetchedSuccessListener success, - ErrorListener errorListener) { + public void addReplyOnATicket(String cancelTag, String message, HSUploadAttachment[] uploadattachments, HSTicket ticket, HSUser user, RequestQueue queue, + OnFetchedSuccessListener success, ErrorListener errorListener) { + HSAttachment[] attachments = new HSAttachment[uploadattachments.length]; for (int i = 0; i < attachments.length; i++) { attachments[i] = uploadattachments[i].getAttachment(); @@ -82,13 +78,13 @@ public void fetchAllUpdateOnTicket(String cancelTag, HSTicket ticket,HSUser user HSTicketUpdate[] updateArray = new HSTicketUpdate[2]; Calendar delayTime = Calendar.getInstance(); delayTime.add(Calendar.MINUTE, -30); - updateArray[0] = HSTicketUpdate.createUpdateByUser("1","John", "I have not received my order yet. Order id is 23405", delayTime.getTime(), null); + updateArray[0] = HSTicketUpdate.createUpdateByUser("1", "John", "I have not received my order yet. Order id is 23405", delayTime.getTime(), null); updateArray[1] = HSTicketUpdate.createUpdateByStaff("2", "Staff", "We have confirmed, it is on the way and you will receive it in 2 days", Calendar.getInstance().getTime(), null); success.onSuccess(updateArray); } else if (ticket.getTicketId().equals("2")) { HSTicketUpdate[] updateArray = new HSTicketUpdate[1]; - updateArray[0] = HSTicketUpdate.createUpdateByUser("1","John", "Where are you located.", Calendar.getInstance().getTime(), null); + updateArray[0] = HSTicketUpdate.createUpdateByUser("1", "John", "Where are you located?", Calendar.getInstance().getTime(), null); success.onSuccess(updateArray); } else if (ticket.getTicketId().equals("4")) { @@ -101,8 +97,6 @@ else if (ticket.getTicketId().equals("4")) { else { errorListener.onErrorResponse(new VolleyError("Not Found")); } - - - } + } diff --git a/helpstack/src/com/tenmiles/helpstack/logic/HSUtils.java b/helpstack/src/com/tenmiles/helpstack/logic/HSUtils.java index b6b4d3d..37a1d04 100644 --- a/helpstack/src/com/tenmiles/helpstack/logic/HSUtils.java +++ b/helpstack/src/com/tenmiles/helpstack/logic/HSUtils.java @@ -34,41 +34,40 @@ public class HSUtils { private static final long TIME_MILLIS = 1000; - private static final long TIME_MINUTE = 60*TIME_MILLIS; - private static final long TIME_HOUR = 60*TIME_MINUTE; - private static final long TIME_DAY = 24*TIME_HOUR; + private static final long TIME_MINUTE = 60 * TIME_MILLIS; + private static final long TIME_HOUR = 60 * TIME_MINUTE; + private static final long TIME_DAY = 24 * TIME_HOUR; public static final String DATE_PATTERN_SHORT = "yyyy-MM-dd"; public static final String DATE_PATTERN_MEDIUM = "yyyy-MM-dd HH:mm:ss"; public static final String DATE_PATTERN_USER_DISPLAY_SHORT = "dd-MMM, yyyy"; public HSUtils() { - } - - + //TODO: optimize this function - public static String convertToHumanReadableTime(Date givenDate, long currentTimeLong) { - + public static String convertToHumanReadableTime(Date givenDate, long currentTimeLong) { + Calendar currentTime = Calendar.getInstance(); currentTime.setTimeZone(TimeZone.getTimeZone("UTC")); currentTime.setTimeInMillis(currentTimeLong); + Calendar givenTime = Calendar.getInstance(); givenTime.setTimeZone(TimeZone.getTimeZone("UTC")); givenTime.setTime(givenDate); + // Step 1: To see if time difference is less than 24 hours of not long timeDiff = currentTime.getTimeInMillis() - givenTime.getTimeInMillis(); if(timeDiff<=0) { - // I am not sure why can we here return "Now"; } String humanString = null; // Checking if timeDiff is less than 24 or not if((timeDiff/TIME_DAY)>=1) { - // day - int day = (int) (timeDiff/TIME_DAY); - humanString = String.format(Locale.getDefault(),"%dd", day); + // days + int days = (int) (timeDiff/TIME_DAY); + humanString = String.format(Locale.getDefault(), "%dd", days); } else { // checking if greater than hour @@ -82,8 +81,7 @@ else if((timeDiff/TIME_MINUTE)>=1){ humanString = String.format(Locale.getDefault(),"%ds", (timeDiff/TIME_MILLIS)); } } - - + return humanString; } diff --git a/helpstack/src/com/tenmiles/helpstack/logic/OnFetchedArraySuccessListener.java b/helpstack/src/com/tenmiles/helpstack/logic/OnFetchedArraySuccessListener.java index bbbbd08..697ba1d 100644 --- a/helpstack/src/com/tenmiles/helpstack/logic/OnFetchedArraySuccessListener.java +++ b/helpstack/src/com/tenmiles/helpstack/logic/OnFetchedArraySuccessListener.java @@ -22,9 +22,6 @@ package com.tenmiles.helpstack.logic; -import java.util.ArrayList; - -public interface OnFetchedArraySuccessListener -{ +public interface OnFetchedArraySuccessListener { public void onSuccess(Object[] successObject); } diff --git a/helpstack/src/com/tenmiles/helpstack/logic/OnFetchedSuccessListener.java b/helpstack/src/com/tenmiles/helpstack/logic/OnFetchedSuccessListener.java index 9f4c2d2..7f8342d 100644 --- a/helpstack/src/com/tenmiles/helpstack/logic/OnFetchedSuccessListener.java +++ b/helpstack/src/com/tenmiles/helpstack/logic/OnFetchedSuccessListener.java @@ -23,7 +23,6 @@ package com.tenmiles.helpstack.logic; -public interface OnFetchedSuccessListener -{ +public interface OnFetchedSuccessListener { public void onSuccess(Object successObject); } diff --git a/helpstack/src/com/tenmiles/helpstack/logic/OnNewTicketFetchedSuccessListener.java b/helpstack/src/com/tenmiles/helpstack/logic/OnNewTicketFetchedSuccessListener.java index e18cbef..26007c9 100644 --- a/helpstack/src/com/tenmiles/helpstack/logic/OnNewTicketFetchedSuccessListener.java +++ b/helpstack/src/com/tenmiles/helpstack/logic/OnNewTicketFetchedSuccessListener.java @@ -26,7 +26,6 @@ import com.tenmiles.helpstack.model.HSUser; -public interface OnNewTicketFetchedSuccessListener -{ +public interface OnNewTicketFetchedSuccessListener { public void onSuccess(HSUser udpatedUserDetail, HSTicket ticket); } diff --git a/helpstack/src/com/tenmiles/helpstack/model/HSAttachment.java b/helpstack/src/com/tenmiles/helpstack/model/HSAttachment.java index 9a9f13f..29f671d 100644 --- a/helpstack/src/com/tenmiles/helpstack/model/HSAttachment.java +++ b/helpstack/src/com/tenmiles/helpstack/model/HSAttachment.java @@ -23,10 +23,10 @@ package com.tenmiles.helpstack.model; -import java.io.Serializable; - import com.google.gson.annotations.SerializedName; +import java.io.Serializable; + public class HSAttachment implements Serializable{ private static final long serialVersionUID = 8417480406914032499L; @@ -35,7 +35,7 @@ public class HSAttachment implements Serializable{ private String fileName; @SerializedName("mime_type") - private String mime_type; + private String mimeType; @SerializedName("url") private String url; @@ -43,12 +43,11 @@ public class HSAttachment implements Serializable{ public HSAttachment() { } - public static HSAttachment createAttachment(String url, String fileName, String mime_type) - { + public static HSAttachment createAttachment(String url, String fileName, String mimeType) { HSAttachment attachment = new HSAttachment(); attachment.fileName = fileName; - attachment.mime_type = mime_type; + attachment.mimeType = mimeType; attachment.url = url; return attachment; @@ -62,8 +61,8 @@ public String getUrl() { return url; } - public String getMime_type() { - return mime_type; + public String getMimeType() { + return mimeType; } } diff --git a/helpstack/src/com/tenmiles/helpstack/model/HSCachedTicket.java b/helpstack/src/com/tenmiles/helpstack/model/HSCachedTicket.java index 239f570..a8b01a2 100644 --- a/helpstack/src/com/tenmiles/helpstack/model/HSCachedTicket.java +++ b/helpstack/src/com/tenmiles/helpstack/model/HSCachedTicket.java @@ -22,12 +22,12 @@ package com.tenmiles.helpstack.model; +import com.google.gson.annotations.SerializedName; + import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; -import com.google.gson.annotations.SerializedName; - public class HSCachedTicket implements Serializable { @SerializedName("data") @@ -46,7 +46,6 @@ public void setTickets(HSTicket[] tickets) { } public void addTicketAtStart(HSTicket ticket) { - // append the data . and save in cache ArrayList ticketsList = new ArrayList(); ticketsList.add(ticket); ticketsList.addAll(Arrays.asList(tickets)); diff --git a/helpstack/src/com/tenmiles/helpstack/model/HSCachedUser.java b/helpstack/src/com/tenmiles/helpstack/model/HSCachedUser.java index 6320606..df96bc5 100644 --- a/helpstack/src/com/tenmiles/helpstack/model/HSCachedUser.java +++ b/helpstack/src/com/tenmiles/helpstack/model/HSCachedUser.java @@ -22,10 +22,10 @@ package com.tenmiles.helpstack.model; -import java.io.Serializable; - import com.google.gson.annotations.SerializedName; +import java.io.Serializable; + public class HSCachedUser implements Serializable { @SerializedName ("data") diff --git a/helpstack/src/com/tenmiles/helpstack/model/HSDraft.java b/helpstack/src/com/tenmiles/helpstack/model/HSDraft.java index 8044e05..ccadde4 100644 --- a/helpstack/src/com/tenmiles/helpstack/model/HSDraft.java +++ b/helpstack/src/com/tenmiles/helpstack/model/HSDraft.java @@ -67,7 +67,7 @@ public void setDraftAttachments(HSAttachment[] attachmentsArray) { this.draftAttachments = attachmentsArray; } - public void setDraftUSer(HSUser user) { + public void setDraftUser(HSUser user) { this.draftUser = user; } diff --git a/helpstack/src/com/tenmiles/helpstack/model/HSKBItem.java b/helpstack/src/com/tenmiles/helpstack/model/HSKBItem.java index 4442b21..1e2270c 100644 --- a/helpstack/src/com/tenmiles/helpstack/model/HSKBItem.java +++ b/helpstack/src/com/tenmiles/helpstack/model/HSKBItem.java @@ -22,10 +22,10 @@ package com.tenmiles.helpstack.model; -import java.io.Serializable; - import com.google.gson.annotations.SerializedName; +import java.io.Serializable; + public class HSKBItem implements Serializable{ transient public static final int TYPE_ARTICLE = 0; diff --git a/helpstack/src/com/tenmiles/helpstack/model/HSTicket.java b/helpstack/src/com/tenmiles/helpstack/model/HSTicket.java index 2f15d75..51a6ed6 100644 --- a/helpstack/src/com/tenmiles/helpstack/model/HSTicket.java +++ b/helpstack/src/com/tenmiles/helpstack/model/HSTicket.java @@ -22,10 +22,10 @@ package com.tenmiles.helpstack.model; -import java.io.Serializable; - import com.google.gson.annotations.SerializedName; +import java.io.Serializable; + /** * * @author Nalin Chhajer diff --git a/helpstack/src/com/tenmiles/helpstack/model/HSTicketUpdate.java b/helpstack/src/com/tenmiles/helpstack/model/HSTicketUpdate.java index 2bd8e4a..cdf8a79 100644 --- a/helpstack/src/com/tenmiles/helpstack/model/HSTicketUpdate.java +++ b/helpstack/src/com/tenmiles/helpstack/model/HSTicketUpdate.java @@ -22,11 +22,11 @@ package com.tenmiles.helpstack.model; +import com.google.gson.annotations.SerializedName; + import java.io.Serializable; import java.util.Date; -import com.google.gson.annotations.SerializedName; - public class HSTicketUpdate implements Serializable { public static final int TYPE_STAFF = 0; @@ -52,24 +52,24 @@ public class HSTicketUpdate implements Serializable { // Date, Attachments etc will come here - public static HSTicketUpdate createUpdateByStaff(String updateId, String name, String text, Date update_time, HSAttachment[] attachments) { + public static HSTicketUpdate createUpdateByStaff(String updateId, String name, String text, Date updateTime, HSAttachment[] attachments) { HSTicketUpdate update = new HSTicketUpdate(); update.updateBy = TYPE_STAFF; update.text = text; update.updateId = updateId; update.name = name; - update.updateTime = update_time; + update.updateTime = updateTime; update.attachments = attachments; return update; } - public static HSTicketUpdate createUpdateByUser(String updateId, String name, String text, Date update_time, HSAttachment[] attachments) { + public static HSTicketUpdate createUpdateByUser(String updateId, String name, String text, Date updateTime, HSAttachment[] attachments) { HSTicketUpdate update = new HSTicketUpdate(); update.updateBy = TYPE_USER; update.text = text; update.updateId = updateId; update.name = name; - update.updateTime = update_time; + update.updateTime = updateTime; update.attachments = attachments; return update; } @@ -94,15 +94,11 @@ public HSAttachment[] getAttachments() { return attachments; } - public boolean isAttachmentEmtpy() { - if(attachments == null) { + public boolean isAttachmentEmpty() { + if(attachments == null || attachments.length == 0) { return true; - } else { - if(attachments.length == 0) { - return true; - } } - return false; + return false; } } diff --git a/helpstack/src/com/tenmiles/helpstack/model/HSUploadAttachment.java b/helpstack/src/com/tenmiles/helpstack/model/HSUploadAttachment.java index d728e13..f5844c4 100644 --- a/helpstack/src/com/tenmiles/helpstack/model/HSUploadAttachment.java +++ b/helpstack/src/com/tenmiles/helpstack/model/HSUploadAttachment.java @@ -22,13 +22,13 @@ package com.tenmiles.helpstack.model; -import java.io.FileNotFoundException; -import java.io.InputStream; +import android.content.Context; +import android.net.Uri; import org.apache.http.entity.mime.content.InputStreamBody; -import android.content.Context; -import android.net.Uri; +import java.io.FileNotFoundException; +import java.io.InputStream; public class HSUploadAttachment { @@ -42,10 +42,13 @@ public HSUploadAttachment(Context context, HSAttachment attachment) { public InputStreamBody generateStreamToUpload() throws FileNotFoundException { InputStream stream = generateInputStreamToUpload(); - - InputStreamBody body = new InputStreamBody(stream, attachment.getMime_type(), - attachment.getFileName() == null?"attachment":attachment.getFileName()); - + + String attachmentFileName = "attachment"; + if (attachment.getFileName()!=null) { + attachmentFileName = attachment.getFileName(); + } + + InputStreamBody body = new InputStreamBody(stream, attachment.getMimeType(), attachmentFileName); return body; } @@ -54,7 +57,6 @@ public InputStream generateInputStreamToUpload() throws FileNotFoundException { return stream; } - public HSAttachment getAttachment() { return attachment; } diff --git a/helpstack/src/com/tenmiles/helpstack/model/HSUser.java b/helpstack/src/com/tenmiles/helpstack/model/HSUser.java index 8c83da4..d48c9cd 100644 --- a/helpstack/src/com/tenmiles/helpstack/model/HSUser.java +++ b/helpstack/src/com/tenmiles/helpstack/model/HSUser.java @@ -34,10 +34,10 @@ public class HSUser implements Serializable { @SerializedName("first_name") - private String first_Name; + private String firstName; @SerializedName("last_name") - private String last_Name; + private String lastName; @SerializedName("email") private String emailAddress; @@ -54,30 +54,30 @@ public class HSUser implements Serializable { public HSUser() { } - public static HSUser createNewUserWithDetails(String first_name, String last_name, String email) { + public static HSUser createNewUserWithDetails(String firstName, String lastName, String email) { HSUser user = new HSUser(); - user.first_Name = first_name; - user.last_Name = last_name; + user.firstName = firstName; + user.lastName = lastName; user.emailAddress = email; return user; } - public static HSUser createNewUserWithDetails(String first_name, String last_name, String email, String userLink) { - HSUser user = createNewUserWithDetails(first_name, last_name, email); + public static HSUser createNewUserWithDetails(String firstName, String lastName, String email, String userLink) { + HSUser user = createNewUserWithDetails(firstName, lastName, email); user.userApiHref = userLink; return user; } public String getFirstName() { - return first_Name; + return firstName; } public String getLastName() { - return last_Name; + return lastName; } public String getFullName() { - return ""+first_Name+" "+last_Name; + return ""+ firstName +" "+ lastName; } public String getEmail() { diff --git a/helpstack/src/com/tenmiles/helpstack/service/AttachmentDownloadReceiver.java b/helpstack/src/com/tenmiles/helpstack/service/AttachmentDownloadReceiver.java index 58fde34..7287076 100644 --- a/helpstack/src/com/tenmiles/helpstack/service/AttachmentDownloadReceiver.java +++ b/helpstack/src/com/tenmiles/helpstack/service/AttachmentDownloadReceiver.java @@ -40,17 +40,18 @@ public class AttachmentDownloadReceiver extends BroadcastReceiver { private static final int NOTIFICATION_ID = 1008; private static final int PENDING_INTENT_REQUEST_CODE = 108; + @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); - String package_name = intent.getPackage(); - String cpackage = context.getPackageName(); + String intendedPackage = intent.getPackage(); + String contextPackage = context.getPackageName(); - if (package_name.equals(cpackage) && DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) { + if (intendedPackage.equals(contextPackage) && DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) { downloadCompleted(context, intent); } - else if (package_name.equals(cpackage) && DownloadManager.ACTION_NOTIFICATION_CLICKED.equals(action)) { - notificationClicked(context,intent); + else if (intendedPackage.equals(contextPackage) && DownloadManager.ACTION_NOTIFICATION_CLICKED.equals(action)) { + notificationClicked(context, intent); } } @@ -61,14 +62,14 @@ private void notificationClicked(Context context, Intent intent) { } private void downloadCompleted(Context context, Intent intent) { - StringBuilder text = new StringBuilder(); //Files are ready String filename = context.getString(R.string.hs_attachment); String filepath = null; String mediaType = null; - DownloadManager dm = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE); - long downloadId = intent.getLongExtra( - DownloadManager.EXTRA_DOWNLOAD_ID, 0); + DownloadManager dm = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE); + long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0); + StringBuilder text = new StringBuilder(); + Query query = new Query(); query.setFilterById(downloadId); Cursor c = dm.query(query); @@ -79,26 +80,23 @@ private void downloadCompleted(Context context, Intent intent) { mediaType = c.getString(c.getColumnIndex(DownloadManager.COLUMN_MEDIA_TYPE)); if(status == DownloadManager.STATUS_SUCCESSFUL) { text.append(context.getString(R.string.hs_download_complete)); - } else { text.append(context.getString(R.string.hs_error_during_download)); } } - - NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - NotificationCompat.Builder notificationbuilder = new NotificationCompat.Builder(context); - notificationbuilder.setAutoCancel(true); - notificationbuilder.setContentText(text.toString()); - notificationbuilder.setContentTitle(filename); - notificationbuilder.setSmallIcon(R.drawable.hs_notification_download_light_img); - notificationbuilder.setDefaults(Notification.DEFAULT_SOUND|Notification.DEFAULT_VIBRATE); - notificationbuilder.setContentIntent(getPendingIntent(context)); + NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context); + notificationBuilder.setAutoCancel(true); + notificationBuilder.setContentText(text.toString()); + notificationBuilder.setContentTitle(filename); + notificationBuilder.setSmallIcon(R.drawable.hs_notification_download_light_img); + notificationBuilder.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE); + notificationBuilder.setContentIntent(getPendingIntent(context)); - notificationManager.notify(filename,NOTIFICATION_ID, notificationbuilder.build()); + notificationManager.notify(filename, NOTIFICATION_ID, notificationBuilder.build()); } public PendingIntent getPendingIntent(Context context, String filename, String mediatype) { diff --git a/helpstack/src/com/tenmiles/helpstack/service/DownloadAttachmentUtility.java b/helpstack/src/com/tenmiles/helpstack/service/DownloadAttachmentUtility.java index 132a9a0..1c6ab40 100644 --- a/helpstack/src/com/tenmiles/helpstack/service/DownloadAttachmentUtility.java +++ b/helpstack/src/com/tenmiles/helpstack/service/DownloadAttachmentUtility.java @@ -22,35 +22,32 @@ package com.tenmiles.helpstack.service; -import com.tenmiles.helpstack.R; - import android.app.DownloadManager; import android.content.Context; import android.net.Uri; import android.os.Build; import android.widget.Toast; +import com.tenmiles.helpstack.R; + public class DownloadAttachmentUtility { public static long downloadAttachment(Context ctx, String url, String title) { DownloadManager dm; - - dm = (DownloadManager) ctx.getSystemService(Context.DOWNLOAD_SERVICE); - - DownloadManager.Request request = new DownloadManager.Request( - Uri.parse(url)); - request.setTitle(title); - request.setDescription(ctx.getString(R.string.hs_attachments)); + dm = (DownloadManager) ctx.getSystemService(Context.DOWNLOAD_SERVICE); + + DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); + request.setTitle(title); + request.setDescription(ctx.getString(R.string.hs_attachments)); + if(Build.VERSION.SDK_INT >= 11) { request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE); request.allowScanningByMediaScanner(); } long enqueue = dm.enqueue(request); - Toast.makeText(ctx, - ctx.getString(R.string.hs_attachments) + " " + title + ". " + ctx.getString(R.string.hs_notify_download_complete), - Toast.LENGTH_LONG) - .show(); + final String toastText = ctx.getString(R.string.hs_attachments) + " " + title + ". " + ctx.getString(R.string.hs_notify_download_complete); + Toast.makeText(ctx, toastText, Toast.LENGTH_LONG).show(); return enqueue; } diff --git a/helpstack/src/com/tenmiles/helpstack/activities/DrawingView.java b/helpstack/src/com/tenmiles/helpstack/widget/DrawingView.java similarity index 98% rename from helpstack/src/com/tenmiles/helpstack/activities/DrawingView.java rename to helpstack/src/com/tenmiles/helpstack/widget/DrawingView.java index 6ea0dd6..92c39b2 100644 --- a/helpstack/src/com/tenmiles/helpstack/activities/DrawingView.java +++ b/helpstack/src/com/tenmiles/helpstack/widget/DrawingView.java @@ -1,4 +1,4 @@ -package com.tenmiles.helpstack.activities; +package com.tenmiles.helpstack.theme.widget; import android.content.Context; import android.graphics.Bitmap; @@ -10,10 +10,8 @@ import android.view.MotionEvent; import android.view.View; -import static java.lang.StrictMath.max; import static java.lang.StrictMath.min; - public class DrawingView extends View { private Path mPath; diff --git a/helpstack/src/com/tenmiles/helpstack/theme/widget/HSExpandableListView.java b/helpstack/src/com/tenmiles/helpstack/widget/HSExpandableListView.java similarity index 98% rename from helpstack/src/com/tenmiles/helpstack/theme/widget/HSExpandableListView.java rename to helpstack/src/com/tenmiles/helpstack/widget/HSExpandableListView.java index 3bdfeae..2483a12 100644 --- a/helpstack/src/com/tenmiles/helpstack/theme/widget/HSExpandableListView.java +++ b/helpstack/src/com/tenmiles/helpstack/widget/HSExpandableListView.java @@ -35,8 +35,7 @@ */ public class HSExpandableListView extends ExpandableListView { - public HSExpandableListView(Context context, AttributeSet attrs, - int defStyle) { + public HSExpandableListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initView(context); } @@ -52,8 +51,5 @@ public HSExpandableListView(Context context) { } public void initView(Context context) { - } - - } From 26a471acc38b8682898e342bee4e08d9c78e04a5 Mon Sep 17 00:00:00 2001 From: Anirudh S Date: Thu, 3 Sep 2015 14:10:08 +0530 Subject: [PATCH 03/12] Replace all drawables with official Material Design icons --- HelpStackExample/res/values-v14/styles.xml | 2 +- helpstack/res/drawable-hdpi/hs_accept.png | Bin 0 -> 227 bytes .../res/drawable-hdpi/hs_accept_light.png | Bin 0 -> 255 bytes .../drawable-hdpi/hs_action_accept_img.png | Bin 420 -> 0 bytes .../hs_action_accept_light_img.png | Bin 401 -> 0 bytes .../hs_action_attachment_light_img.png | Bin 472 -> 0 bytes .../drawable-hdpi/hs_action_forward_img.png | Bin 367 -> 0 bytes .../hs_action_forward_light_img.png | Bin 304 -> 0 bytes .../hs_action_new_attachment_light_img.png | Bin 587 -> 0 bytes .../hs_action_send_now_light_img.png | Bin 411 -> 0 bytes .../drawable-hdpi/hs_add_attachment_img.png | Bin 670 -> 626 bytes .../hs_add_attachment_img_light.png | Bin 0 -> 648 bytes helpstack/res/drawable-hdpi/hs_attachment.png | Bin 0 -> 610 bytes .../res/drawable-hdpi/hs_attachment_img.png | Bin 559 -> 0 bytes .../res/drawable-hdpi/hs_attachment_light.png | Bin 0 -> 631 bytes helpstack/res/drawable-hdpi/hs_disclosure.png | Bin 0 -> 172 bytes .../res/drawable-hdpi/hs_disclosure_img.png | Bin 397 -> 0 bytes .../res/drawable-hdpi/hs_disclosure_light.png | Bin 0 -> 175 bytes helpstack/res/drawable-hdpi/hs_download.png | Bin 0 -> 173 bytes .../res/drawable-hdpi/hs_download_light.png | Bin 0 -> 187 bytes helpstack/res/drawable-hdpi/hs_forward.png | Bin 0 -> 186 bytes .../res/drawable-hdpi/hs_forward_light.png | Bin 0 -> 195 bytes helpstack/res/drawable-hdpi/hs_launcher.png | Bin 7658 -> 3418 bytes .../hs_notification_download_light_img.png | Bin 1331 -> 0 bytes helpstack/res/drawable-hdpi/hs_search.png | Bin 0 -> 390 bytes helpstack/res/drawable-hdpi/hs_search_img.png | Bin 688 -> 0 bytes .../res/drawable-hdpi/hs_search_img_light.png | Bin 650 -> 0 bytes .../res/drawable-hdpi/hs_search_light.png | Bin 0 -> 396 bytes helpstack/res/drawable-hdpi/hs_send.png | Bin 0 -> 412 bytes helpstack/res/drawable-hdpi/hs_send_light.png | Bin 0 -> 446 bytes .../res/drawable-hdpi/hs_send_now_img.png | Bin 465 -> 0 bytes helpstack/res/drawable-mdpi/hs_accept.png | Bin 0 -> 188 bytes .../res/drawable-mdpi/hs_accept_light.png | Bin 0 -> 199 bytes .../drawable-mdpi/hs_action_accept_img.png | Bin 325 -> 0 bytes .../hs_action_accept_light_img.png | Bin 246 -> 0 bytes .../hs_action_attachment_light_img.png | Bin 379 -> 0 bytes .../drawable-mdpi/hs_action_forward_img.png | Bin 321 -> 0 bytes .../hs_action_forward_light_img.png | Bin 277 -> 0 bytes .../hs_action_new_attachment_light_img.png | Bin 415 -> 0 bytes .../hs_action_send_now_light_img.png | Bin 303 -> 0 bytes .../drawable-mdpi/hs_add_attachment_img.png | Bin 454 -> 404 bytes .../hs_add_attachment_img_light.png | Bin 0 -> 411 bytes helpstack/res/drawable-mdpi/hs_attachment.png | Bin 0 -> 399 bytes .../res/drawable-mdpi/hs_attachment_img.png | Bin 393 -> 0 bytes .../res/drawable-mdpi/hs_attachment_light.png | Bin 0 -> 403 bytes helpstack/res/drawable-mdpi/hs_disclosure.png | Bin 0 -> 138 bytes .../res/drawable-mdpi/hs_disclosure_img.png | Bin 270 -> 0 bytes .../res/drawable-mdpi/hs_disclosure_light.png | Bin 0 -> 144 bytes helpstack/res/drawable-mdpi/hs_download.png | Bin 0 -> 144 bytes .../res/drawable-mdpi/hs_download_light.png | Bin 0 -> 157 bytes helpstack/res/drawable-mdpi/hs_forward.png | Bin 0 -> 150 bytes .../res/drawable-mdpi/hs_forward_light.png | Bin 0 -> 160 bytes helpstack/res/drawable-mdpi/hs_launcher.png | Bin 3777 -> 2206 bytes .../hs_notification_download_light_img.png | Bin 1238 -> 0 bytes helpstack/res/drawable-mdpi/hs_search.png | Bin 0 -> 249 bytes helpstack/res/drawable-mdpi/hs_search_img.png | Bin 482 -> 0 bytes .../res/drawable-mdpi/hs_search_img_light.png | Bin 449 -> 0 bytes .../res/drawable-mdpi/hs_search_light.png | Bin 0 -> 247 bytes helpstack/res/drawable-mdpi/hs_send.png | Bin 0 -> 333 bytes helpstack/res/drawable-mdpi/hs_send_light.png | Bin 0 -> 344 bytes .../res/drawable-mdpi/hs_send_now_img.png | Bin 332 -> 0 bytes helpstack/res/drawable-xhdpi/hs_accept.png | Bin 0 -> 277 bytes .../res/drawable-xhdpi/hs_accept_light.png | Bin 0 -> 308 bytes .../drawable-xhdpi/hs_action_accept_img.png | Bin 478 -> 0 bytes .../hs_action_accept_light_img.png | Bin 475 -> 0 bytes .../hs_action_attachment_light_img.png | Bin 590 -> 0 bytes .../drawable-xhdpi/hs_action_forward_img.png | Bin 440 -> 0 bytes .../hs_action_forward_light_img.png | Bin 407 -> 0 bytes .../hs_action_new_attachment_light_img.png | Bin 753 -> 0 bytes .../hs_action_send_now_light_img.png | Bin 528 -> 0 bytes .../drawable-xhdpi/hs_add_attachment_img.png | Bin 791 -> 797 bytes .../hs_add_attachment_img_light.png | Bin 0 -> 816 bytes .../res/drawable-xhdpi/hs_attachment.png | Bin 0 -> 759 bytes .../res/drawable-xhdpi/hs_attachment_img.png | Bin 686 -> 0 bytes .../drawable-xhdpi/hs_attachment_light.png | Bin 0 -> 781 bytes .../res/drawable-xhdpi/hs_disclosure.png | Bin 0 -> 195 bytes .../res/drawable-xhdpi/hs_disclosure_img.png | Bin 513 -> 0 bytes .../drawable-xhdpi/hs_disclosure_light.png | Bin 0 -> 206 bytes helpstack/res/drawable-xhdpi/hs_download.png | Bin 0 -> 209 bytes .../res/drawable-xhdpi/hs_download_light.png | Bin 0 -> 233 bytes helpstack/res/drawable-xhdpi/hs_forward.png | Bin 0 -> 222 bytes .../res/drawable-xhdpi/hs_forward_light.png | Bin 0 -> 235 bytes helpstack/res/drawable-xhdpi/hs_launcher.png | Bin 12516 -> 4842 bytes .../hs_notification_download_light_img.png | Bin 1482 -> 0 bytes helpstack/res/drawable-xhdpi/hs_search.png | Bin 0 -> 464 bytes .../res/drawable-xhdpi/hs_search_img.png | Bin 902 -> 0 bytes .../drawable-xhdpi/hs_search_img_light.png | Bin 827 -> 0 bytes .../res/drawable-xhdpi/hs_search_light.png | Bin 0 -> 465 bytes helpstack/res/drawable-xhdpi/hs_send.png | Bin 0 -> 543 bytes .../res/drawable-xhdpi/hs_send_light.png | Bin 0 -> 586 bytes .../res/drawable-xhdpi/hs_send_now_img.png | Bin 578 -> 0 bytes helpstack/res/drawable-xxhdpi/hs_accept.png | Bin 0 -> 345 bytes .../res/drawable-xxhdpi/hs_accept_light.png | Bin 0 -> 386 bytes .../drawable-xxhdpi/hs_action_accept_img.png | Bin 649 -> 0 bytes .../hs_action_accept_light_img.png | Bin 619 -> 0 bytes .../hs_action_attachment_light_img.png | Bin 822 -> 0 bytes .../drawable-xxhdpi/hs_action_forward_img.png | Bin 566 -> 0 bytes .../hs_action_forward_light_img.png | Bin 491 -> 0 bytes .../hs_action_new_attachment_light_img.png | Bin 1048 -> 0 bytes .../hs_action_send_now_light_img.png | Bin 671 -> 0 bytes .../drawable-xxhdpi/hs_add_attachment_img.png | Bin 1231 -> 1226 bytes .../hs_add_attachment_img_light.png | Bin 0 -> 1257 bytes .../res/drawable-xxhdpi/hs_attachment.png | Bin 0 -> 1123 bytes .../res/drawable-xxhdpi/hs_attachment_img.png | Bin 1010 -> 0 bytes .../drawable-xxhdpi/hs_attachment_light.png | Bin 0 -> 1162 bytes .../res/drawable-xxhdpi/hs_disclosure.png | Bin 0 -> 256 bytes .../res/drawable-xxhdpi/hs_disclosure_img.png | Bin 786 -> 0 bytes .../drawable-xxhdpi/hs_disclosure_light.png | Bin 0 -> 273 bytes helpstack/res/drawable-xxhdpi/hs_download.png | Bin 0 -> 264 bytes .../res/drawable-xxhdpi/hs_download_light.png | Bin 0 -> 304 bytes helpstack/res/drawable-xxhdpi/hs_forward.png | Bin 0 -> 294 bytes .../res/drawable-xxhdpi/hs_forward_light.png | Bin 0 -> 308 bytes helpstack/res/drawable-xxhdpi/hs_launcher.png | Bin 24777 -> 7718 bytes helpstack/res/drawable-xxhdpi/hs_search.png | Bin 0 -> 684 bytes .../res/drawable-xxhdpi/hs_search_img.png | Bin 1384 -> 0 bytes .../drawable-xxhdpi/hs_search_img_light.png | Bin 1152 -> 0 bytes .../res/drawable-xxhdpi/hs_search_light.png | Bin 0 -> 728 bytes helpstack/res/drawable-xxhdpi/hs_send.png | Bin 0 -> 714 bytes .../res/drawable-xxhdpi/hs_send_light.png | Bin 0 -> 806 bytes .../res/drawable-xxhdpi/hs_send_now_img.png | Bin 759 -> 0 bytes .../res/layout/hs_fragment_issue_detail.xml | 2 +- helpstack/res/values/hs_default_theme.xml | 10 +++++----- .../fragments/IssueDetailFragment.java | 2 +- .../helpstack/fragments/NewIssueFragment.java | 2 +- .../service/AttachmentDownloadReceiver.java | 2 +- 125 files changed, 10 insertions(+), 10 deletions(-) create mode 100644 helpstack/res/drawable-hdpi/hs_accept.png create mode 100644 helpstack/res/drawable-hdpi/hs_accept_light.png delete mode 100644 helpstack/res/drawable-hdpi/hs_action_accept_img.png delete mode 100644 helpstack/res/drawable-hdpi/hs_action_accept_light_img.png delete mode 100644 helpstack/res/drawable-hdpi/hs_action_attachment_light_img.png delete mode 100644 helpstack/res/drawable-hdpi/hs_action_forward_img.png delete mode 100644 helpstack/res/drawable-hdpi/hs_action_forward_light_img.png delete mode 100644 helpstack/res/drawable-hdpi/hs_action_new_attachment_light_img.png delete mode 100644 helpstack/res/drawable-hdpi/hs_action_send_now_light_img.png create mode 100644 helpstack/res/drawable-hdpi/hs_add_attachment_img_light.png create mode 100644 helpstack/res/drawable-hdpi/hs_attachment.png delete mode 100644 helpstack/res/drawable-hdpi/hs_attachment_img.png create mode 100644 helpstack/res/drawable-hdpi/hs_attachment_light.png create mode 100644 helpstack/res/drawable-hdpi/hs_disclosure.png delete mode 100644 helpstack/res/drawable-hdpi/hs_disclosure_img.png create mode 100644 helpstack/res/drawable-hdpi/hs_disclosure_light.png create mode 100644 helpstack/res/drawable-hdpi/hs_download.png create mode 100644 helpstack/res/drawable-hdpi/hs_download_light.png create mode 100644 helpstack/res/drawable-hdpi/hs_forward.png create mode 100644 helpstack/res/drawable-hdpi/hs_forward_light.png delete mode 100644 helpstack/res/drawable-hdpi/hs_notification_download_light_img.png create mode 100644 helpstack/res/drawable-hdpi/hs_search.png delete mode 100644 helpstack/res/drawable-hdpi/hs_search_img.png delete mode 100644 helpstack/res/drawable-hdpi/hs_search_img_light.png create mode 100644 helpstack/res/drawable-hdpi/hs_search_light.png create mode 100644 helpstack/res/drawable-hdpi/hs_send.png create mode 100644 helpstack/res/drawable-hdpi/hs_send_light.png delete mode 100644 helpstack/res/drawable-hdpi/hs_send_now_img.png create mode 100644 helpstack/res/drawable-mdpi/hs_accept.png create mode 100644 helpstack/res/drawable-mdpi/hs_accept_light.png delete mode 100644 helpstack/res/drawable-mdpi/hs_action_accept_img.png delete mode 100644 helpstack/res/drawable-mdpi/hs_action_accept_light_img.png delete mode 100644 helpstack/res/drawable-mdpi/hs_action_attachment_light_img.png delete mode 100644 helpstack/res/drawable-mdpi/hs_action_forward_img.png delete mode 100644 helpstack/res/drawable-mdpi/hs_action_forward_light_img.png delete mode 100644 helpstack/res/drawable-mdpi/hs_action_new_attachment_light_img.png delete mode 100644 helpstack/res/drawable-mdpi/hs_action_send_now_light_img.png create mode 100644 helpstack/res/drawable-mdpi/hs_add_attachment_img_light.png create mode 100644 helpstack/res/drawable-mdpi/hs_attachment.png delete mode 100644 helpstack/res/drawable-mdpi/hs_attachment_img.png create mode 100644 helpstack/res/drawable-mdpi/hs_attachment_light.png create mode 100644 helpstack/res/drawable-mdpi/hs_disclosure.png delete mode 100644 helpstack/res/drawable-mdpi/hs_disclosure_img.png create mode 100644 helpstack/res/drawable-mdpi/hs_disclosure_light.png create mode 100644 helpstack/res/drawable-mdpi/hs_download.png create mode 100644 helpstack/res/drawable-mdpi/hs_download_light.png create mode 100644 helpstack/res/drawable-mdpi/hs_forward.png create mode 100644 helpstack/res/drawable-mdpi/hs_forward_light.png delete mode 100644 helpstack/res/drawable-mdpi/hs_notification_download_light_img.png create mode 100644 helpstack/res/drawable-mdpi/hs_search.png delete mode 100644 helpstack/res/drawable-mdpi/hs_search_img.png delete mode 100644 helpstack/res/drawable-mdpi/hs_search_img_light.png create mode 100644 helpstack/res/drawable-mdpi/hs_search_light.png create mode 100644 helpstack/res/drawable-mdpi/hs_send.png create mode 100644 helpstack/res/drawable-mdpi/hs_send_light.png delete mode 100644 helpstack/res/drawable-mdpi/hs_send_now_img.png create mode 100644 helpstack/res/drawable-xhdpi/hs_accept.png create mode 100644 helpstack/res/drawable-xhdpi/hs_accept_light.png delete mode 100644 helpstack/res/drawable-xhdpi/hs_action_accept_img.png delete mode 100644 helpstack/res/drawable-xhdpi/hs_action_accept_light_img.png delete mode 100644 helpstack/res/drawable-xhdpi/hs_action_attachment_light_img.png delete mode 100644 helpstack/res/drawable-xhdpi/hs_action_forward_img.png delete mode 100644 helpstack/res/drawable-xhdpi/hs_action_forward_light_img.png delete mode 100644 helpstack/res/drawable-xhdpi/hs_action_new_attachment_light_img.png delete mode 100644 helpstack/res/drawable-xhdpi/hs_action_send_now_light_img.png create mode 100644 helpstack/res/drawable-xhdpi/hs_add_attachment_img_light.png create mode 100644 helpstack/res/drawable-xhdpi/hs_attachment.png delete mode 100644 helpstack/res/drawable-xhdpi/hs_attachment_img.png create mode 100644 helpstack/res/drawable-xhdpi/hs_attachment_light.png create mode 100644 helpstack/res/drawable-xhdpi/hs_disclosure.png delete mode 100644 helpstack/res/drawable-xhdpi/hs_disclosure_img.png create mode 100644 helpstack/res/drawable-xhdpi/hs_disclosure_light.png create mode 100644 helpstack/res/drawable-xhdpi/hs_download.png create mode 100644 helpstack/res/drawable-xhdpi/hs_download_light.png create mode 100644 helpstack/res/drawable-xhdpi/hs_forward.png create mode 100644 helpstack/res/drawable-xhdpi/hs_forward_light.png delete mode 100644 helpstack/res/drawable-xhdpi/hs_notification_download_light_img.png create mode 100644 helpstack/res/drawable-xhdpi/hs_search.png delete mode 100644 helpstack/res/drawable-xhdpi/hs_search_img.png delete mode 100644 helpstack/res/drawable-xhdpi/hs_search_img_light.png create mode 100644 helpstack/res/drawable-xhdpi/hs_search_light.png create mode 100644 helpstack/res/drawable-xhdpi/hs_send.png create mode 100644 helpstack/res/drawable-xhdpi/hs_send_light.png delete mode 100644 helpstack/res/drawable-xhdpi/hs_send_now_img.png create mode 100644 helpstack/res/drawable-xxhdpi/hs_accept.png create mode 100644 helpstack/res/drawable-xxhdpi/hs_accept_light.png delete mode 100644 helpstack/res/drawable-xxhdpi/hs_action_accept_img.png delete mode 100644 helpstack/res/drawable-xxhdpi/hs_action_accept_light_img.png delete mode 100644 helpstack/res/drawable-xxhdpi/hs_action_attachment_light_img.png delete mode 100644 helpstack/res/drawable-xxhdpi/hs_action_forward_img.png delete mode 100644 helpstack/res/drawable-xxhdpi/hs_action_forward_light_img.png delete mode 100644 helpstack/res/drawable-xxhdpi/hs_action_new_attachment_light_img.png delete mode 100644 helpstack/res/drawable-xxhdpi/hs_action_send_now_light_img.png create mode 100644 helpstack/res/drawable-xxhdpi/hs_add_attachment_img_light.png create mode 100644 helpstack/res/drawable-xxhdpi/hs_attachment.png delete mode 100644 helpstack/res/drawable-xxhdpi/hs_attachment_img.png create mode 100644 helpstack/res/drawable-xxhdpi/hs_attachment_light.png create mode 100644 helpstack/res/drawable-xxhdpi/hs_disclosure.png delete mode 100644 helpstack/res/drawable-xxhdpi/hs_disclosure_img.png create mode 100644 helpstack/res/drawable-xxhdpi/hs_disclosure_light.png create mode 100644 helpstack/res/drawable-xxhdpi/hs_download.png create mode 100644 helpstack/res/drawable-xxhdpi/hs_download_light.png create mode 100644 helpstack/res/drawable-xxhdpi/hs_forward.png create mode 100644 helpstack/res/drawable-xxhdpi/hs_forward_light.png create mode 100644 helpstack/res/drawable-xxhdpi/hs_search.png delete mode 100644 helpstack/res/drawable-xxhdpi/hs_search_img.png delete mode 100644 helpstack/res/drawable-xxhdpi/hs_search_img_light.png create mode 100644 helpstack/res/drawable-xxhdpi/hs_search_light.png create mode 100644 helpstack/res/drawable-xxhdpi/hs_send.png create mode 100644 helpstack/res/drawable-xxhdpi/hs_send_light.png delete mode 100644 helpstack/res/drawable-xxhdpi/hs_send_now_img.png diff --git a/HelpStackExample/res/values-v14/styles.xml b/HelpStackExample/res/values-v14/styles.xml index 87a9c47..9ddc658 100644 --- a/HelpStackExample/res/values-v14/styles.xml +++ b/HelpStackExample/res/values-v14/styles.xml @@ -5,7 +5,7 @@ AppBaseTheme from BOTH res/values/styles.xml and res/values-v11/styles.xml on API 14+ devices. --> - diff --git a/helpstack/res/drawable-hdpi/hs_accept.png b/helpstack/res/drawable-hdpi/hs_accept.png new file mode 100644 index 0000000000000000000000000000000000000000..c9c017410928bb4c9ee56d705130377537886c81 GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhawR(ZNOhEy=Vy}Xh4P=JVY;Pow> z)eh4Z*LH7YPT^1c;c>xMY3CR5UF8g~O~MqEfWRtq)wx@t#f5EcS$cj=DHe>A9+n8m zSQI=s(8$bw&b3_ExG+wt$|R_#_-}!m@==T1(=U4%_LXEm_Sb!xepO%dfZ-C;lZ8td zj!$Hgapx-N^Vofj<@f|98RxE|K99&g#i>rA^B#LHEf9Sw5tKPe>yY6RAwfaGi}hdF Y%FU*83Z;v716|GF>FVdQ&MBb@0A~SHegFUf literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-hdpi/hs_accept_light.png b/helpstack/res/drawable-hdpi/hs_accept_light.png new file mode 100644 index 0000000000000000000000000000000000000000..0ebb55559b55f99df3270796763745a71f113078 GIT binary patch literal 255 zcmV=}0*5fKp)HP1G&I6Iqc zjKz5rgEVtukiIy2Qo_-K;J|?c2M!!K@i?}(lWik$uJ;4aeo|e|;mI*SsV?U@bDX5g zSJ{Te;g>S0!OODIPipkgGo)TTcRZxVWAGnIFqKOr(UM3=(~BhBSvit;g=R?Vjh>M7 zAB+M?!6}eboF615Cqq(m7NiKA4^kA)n-qydL_|cirW>R3em?os7vTT^002ovPDHLk FV1hF8Y9jyu literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-hdpi/hs_action_accept_img.png b/helpstack/res/drawable-hdpi/hs_action_accept_img.png deleted file mode 100644 index d93146d9902e3d7631f4d215abcdf50445264481..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 420 zcmV;V0bBlwP)s*f*=Tk znQ#@$vMhzm0V*$w;;CylV=RA!ilNp?lHAL(e7CioGL~PcM|j=n+E1CwBRBYjuIvMV zJWB6cv diff --git a/helpstack/res/drawable-hdpi/hs_action_accept_light_img.png b/helpstack/res/drawable-hdpi/hs_action_accept_light_img.png deleted file mode 100644 index 700fc81518fcf6b50df4f4813efd0578c420279c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 401 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@jK-cWjv*Dd-b}yG+hicnuK95)V@yNtjKi!o;_L+sVg-yf z2f8Ov5KmD!o+ z=itOYrFxxJ=dOewZg!7u>_{WbW;r8SJ6b%6~Jp s=yLf~Y01Dpy*yA4GIE^w!C}C_#CG_t@}%d+z%XX;boFyt=akR{0HbJ|djJ3c diff --git a/helpstack/res/drawable-hdpi/hs_action_attachment_light_img.png b/helpstack/res/drawable-hdpi/hs_action_attachment_light_img.png deleted file mode 100644 index 34fd62b14e885ab6b02042b49e3acce9af1ed968..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 472 zcmV;}0Vn>6P)le)RWOh_riI9 zffH|0GvPoE`Lyx@$%Y6!^vA zRbZhTulA&p$st+G4I9#RbR3xaKPG_**KSm#)V6HAyiF=~c3!{f3}s;IOqQbWE@Za3 zU59;;d0A@AKpC-a>g`Tl8E^DFI$!CS3}|P81)_Tt>hi&U-eBCaBOhi?Md;8rssyhO zHp&$yt%T?lef5E59XgQ{p=tJ)!vuyt3kyC;P2RzEVkKQCVozdIGOs^0_4qDxcB?GB zhSfb>CAJ7u^=Aj1Oypyzb%~_u5P_`CqPE^O|A7!f2qAf(dR^nBLWc=;$I7bfB`7>K!@?;YjFe&K#?oO-q8r?J)nVrKZVc;mG=M= zq4pv}AynVQ2!#45A&oGZg(MMX!<-btbQ+aF43&B2VmvJ`Ip^!QAM6_+_owGj*e#&C zS_f1wp~1S4E)m`{%)i8&KZUl&n*t=_%>YvICIHEJb%1odDgY6$20+ED0Fd!;06HED z(1=IRLT7Y5^bGK3gf}I;IYGt4?}0bOiirP<<^Rw)zyS_$z^3&OU;u1d!(vVPW0L>? N002ovPDHLkV1mrElp6p5 diff --git a/helpstack/res/drawable-hdpi/hs_action_forward_light_img.png b/helpstack/res/drawable-hdpi/hs_action_forward_light_img.png deleted file mode 100644 index 5ca2f1b10f6363a547dd5b76e0715e51a470842c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 304 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 diff --git a/helpstack/res/drawable-hdpi/hs_attachment_light.png b/helpstack/res/drawable-hdpi/hs_attachment_light.png new file mode 100644 index 0000000000000000000000000000000000000000..33f50d0e27c400a720eb271c08f121004e0f108f GIT binary patch literal 631 zcmV--0*L*IP)$z5uPQh}C1!gV+}#Dm@ge6hwLwDI!z^Ay`3ssiK!^p~vE%7K?%; zL5lVbh*Z32D5Q-CllEZaA%*1eFwBy|Y&P4Skbv{~zJZ6`*&z|faU92S9LI6~Gk6S= zBF!3Q;@aUCAGynMBxpjTbu&&5`)a(VFM7}r1zP7XBT<5q%+Y$cn+-b53cKZ5WSaY= zV(lTXC{gc9GeOB+ITdCYz(XwU0N419R;D*RXbybKoItGa2;b0Nh6N3Q?+N>mmh31+ zlp1}Fg1RZx<#6LBhYXb>mld6@2fRBo%p6EU-zvVMHzL9y(*ZhrVLhEu?YKd9>$< zVW%i!%QnMESdhn0lnN(}N&S2wzAEz^Ywkz>O|;J>5W^CTkfunD=qhZGVM2fC%>*4} z9qlO|((;7_375h5j70l`gjw*d(BJ-`EMe>~$BqX`Pk4_2F^Ek&nK9J*2`-9pr7vzFmkPC7_F31JBAQ#kO`v=64yIuT3 RDSZF{002ovPDHLkV1o1)Cl>$! literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-hdpi/hs_disclosure.png b/helpstack/res/drawable-hdpi/hs_disclosure.png new file mode 100644 index 0000000000000000000000000000000000000000..1ecbc5fc78ce59b445dce8def0b231ceb3ef4ebf GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhawialK%Ln;{G-Z;za7%0+u@iL?6 zf-Bute@luim6a<`dY=%>e#^G+XY&TJXW)iRfg-WA=umG*SY#Hp9v!p>=D{`t9-oq>Tr<1Wwk Uf4j?{1FdK9boFyt=akR{0O~bH3IG5A literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-hdpi/hs_disclosure_img.png b/helpstack/res/drawable-hdpi/hs_disclosure_img.png deleted file mode 100644 index 1a1d32bfee972717e7c283b2ffb499996b1f30f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 397 zcmV;80doF{P)1t`c)YR8 z7w!wkgJikSd-v|{oneSXB9Tb+5Ar-OHBGZk=Xg;RS3wZuVHh5+hQo`} z`HT6!Kf|vY1%PeaEdcDQ0B491%_#ul5fGm$L=;7R8VCS%;q-460N?%`$FZ2QP>9eu zC=g#bp$-iM0AAEk0>qo^x_2xLH9$;N2-qgevKtD5JkRUc^_2!y3B+pERZlFo8AFv0e8Zp-N zOj|%SX#rpb1psvjVdrhyOH7?csS6o(E5Y8(aktad4;tzxCH148daOb}*wT#_VRM6J rv{;IIxLXxcWsh>aE)t1EB5IugDp=r5wG^l700000NkvXXu0mjfOHQc> diff --git a/helpstack/res/drawable-hdpi/hs_disclosure_light.png b/helpstack/res/drawable-hdpi/hs_disclosure_light.png new file mode 100644 index 0000000000000000000000000000000000000000..7920aa3d2fc5bde88efb612bcb70d365001c7a58 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw$~;{hLo)8YJ$IYe!GXc$;@bwU zfLDwB`u*HEPP!dxXHkB)@<9tw9m5@$z>6z`v!4Y8E$(&pTpN@>eagzod%Rdxy{2dc zE^>LfG9X`MQSmL!mo+PmFDxux8N9R9&8mIwomHEsEDB8zFM6S(I{jQ!(JP=)57gDp W=XXqc?B^YPCZXI|4Q0T80z@JOXzdv<3r#1fAyL;U#1&qKZB>MpUXO@geCyfj6=8p literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-hdpi/hs_download_light.png b/helpstack/res/drawable-hdpi/hs_download_light.png new file mode 100644 index 0000000000000000000000000000000000000000..671e0b3eceef10ff0879643331d63bf159e6865b GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAifXMj(LE0F#V2E`RilYtzjk|4ie zhKAYNeiA@lyr+v}NX4zUXEt&k4q!Oy@cO-diI-?54^#Vta^^dxpY_j8ckLF_ttvjU yv(xUUhmsv`ct{-ro3igcytD1a$&9qRhs>9DvVUH^W!ib5RScf4elF{r5}E*wu0R6- literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-hdpi/hs_forward.png b/helpstack/res/drawable-hdpi/hs_forward.png new file mode 100644 index 0000000000000000000000000000000000000000..a124259898f2cbaa970223e6b3e995bcf35f4bba GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw8a-VcLn;{G-aO0M;K1YZuw;Sg ziluIAFVFW|^kmcb28&bGmk+R?o|hykC@A>Tc3~Pfx9p`!GLn~OiAV;e&u$gVY+&IO zQt_Ce;P^{ZQ*QR^#;zp-ikuAbP0l+XkKNEt)L literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-hdpi/hs_forward_light.png b/helpstack/res/drawable-hdpi/hs_forward_light.png new file mode 100644 index 0000000000000000000000000000000000000000..8c4c394e4eb1317612782a2943e4fbee8dc8d7f7 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhawx;$MRLo)8Yy?mS3!GXagP&RznYnLV4=JylzIMWb?Jmd6AI z$0im|p(Xi~zQi2lo#Hm>jK_bbnZDCL|N8h%SjNJ04jbQ`lyf}nenQJjAL|s{JG63* ug|%ixVV(;6xz;C#EIs^Wl#~|rtX=Tt#jmu@OkaSmV(@hJb6Mw<&;$V25lZU- literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-hdpi/hs_launcher.png b/helpstack/res/drawable-hdpi/hs_launcher.png index 288b66551d1efd1f13dd06f20a67534d2df57946..cde69bcccec65160d92116f20ffce4fce0b5245c 100644 GIT binary patch literal 3418 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 diff --git a/helpstack/res/drawable-hdpi/hs_search.png b/helpstack/res/drawable-hdpi/hs_search.png new file mode 100644 index 0000000000000000000000000000000000000000..c593e7ad854f5c28ca21f59916bef001daf91141 GIT binary patch literal 390 zcmV;10eSw3P)Ie}b{Y0>&5zCE?P(?24DspFz~M>13AquYhXVmc9#mjToN#t{kJbFs zAFr$!5in(|H)mQ{)7S7t1yqg>d$~PPv)ql={NblEkt88jLVZn=Iu}Ws7?rrmZYm_3 zNYNOhwhXRF<4L~8Xefgt(iC;!M!pONq;Vv_V$_qtDQT*b?=fn~;FcW8x{@z3ayZCn zCneoT+Q&kmk1uoYQ?er;Sop9Soc)d=rOjtt1__rksknv7X<;>w;SeO>WVtLC_5Qg~gJ%R;MW*{kNSulk$4YNk~_ kWUtZ}Wv}va`9I#i0Rr;B7AuwXp#T5?07*qoM6N<$f}W+V0ssI2 literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-hdpi/hs_search_img.png b/helpstack/res/drawable-hdpi/hs_search_img.png deleted file mode 100644 index 00934f2644fb8596c6607905941cf66928faeca3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 688 zcmV;h0#E&kP)mJ*QSV!(wf7Y(`y6@tNy2?|v~5Wi6WZOem(cY{LuUsx8lX9zg=0i`qfb6AGskh@c{#+S#0E0ihuq289FKZz9-5g6w@ukM|^g6D! z*QNy5;{SC8eAhYv$$4WyZP4|dPGc6NkSMmT6*XI> zNu549-&e5yyNbdWTgBUw0&ESt7rPMlxsm;RD-+hF4_jqO5&dO4(#Qdj9;o8=!q_vP z&u-UYRC&u zhV9+h<302t=s*l4q{NELEDzZfeyEwUV3P-3nkWP%W0>e4Vfd}p^iiGTo1)M^$!!Mg zX75NJ#Q1yMFWKgEq{e$HmG;SP2Jn1atv%v^w9ZI{1~gS9F34?q9a31Z%z2YGTJfwt z77)Vice_qnH$o4#Ii%R<*(z1H`I|QMd>4?qL}!Ipt3b%-bz1aNIdV3b^Yl19-{ahT z4gGArE=Y;x{M&?{$pQXUW=E~NRSG$b6o^3W^o1`N(Feht@ADZZ+8`JK8X0R4H159u zK_*17hKoI8QGX!~*m^_#PXe04cx%%--ZTFyA14Gmmwu;gv|$2 zxQ0c1*h&;@xVvikvml365O(6)A?9dQQ(07}_)*z$d0h1^~N?6?9btxc>Su#Z)2YWI$PL8H2%B-;qg5Cv_Au0jcmS*c76rF1PHD=qcO#5~|BiWF^iQr6!iVZ(}^ zM;hb3iwUjnM5gxke7I33GBwOD%Ciif^)Mr(y#ruCmdd1ci*m&L2_CEpy-ky5vCXMO z(Gt(lm`xSyN=~_Dv8PiI!Wo#5)X|M4wLqBYh3-|a6@i?O8Gud;p$$S90N_BmmB!M$ z;ba6rO%RJ)hhfI%0a$jUvD6)<2Q)n)4-#HSJ(1n<#Kw6PlAcfwzJiCFZ*h9(JO7F7 kpL`a81z-V~r5^zX03bgQxSV;wqW}N^07*qoM6N<$f~DIU2><{9 diff --git a/helpstack/res/drawable-hdpi/hs_search_light.png b/helpstack/res/drawable-hdpi/hs_search_light.png new file mode 100644 index 0000000000000000000000000000000000000000..bbfbc96cbce0dc0bf2a0b5ac4fa924dab5e34919 GIT binary patch literal 396 zcmV;70dxL|P)MlVO6$ z;_nvIa)$r8oBh5veEc|b;H00d8XJzB8#}e9C&kTuJTUVGfHxC^|AqQ$xx5-GhxGjg zEIhh0QF{S=I4p;1z^yImyK9a$ptVy59RMztM>fsDtPGlg+w5@HC)kgn4PRK;>X_bu z>liu$k6lAU@DxMm;HncEfHsE4VA2Woz#@iDLEQ;$gC>Udz>Bqx=?R#|P|q7U?)b51 zFp8mM0vel{;U#$YTMYT-70m4}o#qm7R{GY4KES6NLjyhAPCNtV)=Qz}P%ED~n5xR4 zWXH^M-kn(oJmjgYZr`;ht%b(a==+MNfO}N{1?^|3m7t{Z0Ju|yP(a=1sbqEPk1B)$ q>JBiDp_nQ^Q9zA@J6g3rP~3lFwlD09o&!k$00009SiX~8^U zs0^|Jg+V%CkHn^!XN_G>x#5Y=+yEz-Wrb~yx#EG>?g9P#`GEfYY{2gC_rie#Xx{HV z9WZ^+9INbb!ZnY){W<8IMW1Yeb@n*pmggk0eWts)LHZl8!Q?;PKtK|1ApBhkH%LaR z+<&eDk~K&`G6xAr>G?=KM#@GSITuODMG{hxgxp`sLh?^hp*9(*rqfy<$sZ&l`GXn{ zN%(M{j3g9PB%z=p2?Z5ND5xJVg@XEhUa0RPl}e>jN$3j$I+7_=g2%A{0000^MovOQy2%69g!l`1nlRu9q5pvE zX@myYNfB_YP>O(!La_r*Bos5CgHW7+xT6~oU$g=ef(baElh82WwP-+Oc&05B5IJN5 zB1?EcGzbZZ7QO+|!~|S(6`Ez4Z4SBMo;QAS3pm9ho9xr!mKQ!VTYnjTO4rC9j|;f3SF@(pKOI4j=1E3cc)~>%*CI9?W5jhI{pl# zB8ki(Y+Z@Yz#eJxok#U>^@^m0@8+i>;}%I($V3X;e=~@rA`}uySSUP_ppeEjA|O&b zm&b-m^(N!^U}YjHKUfWtNAeJ=)UTTkLOu0J4no~1k!nKyNvNc!s_rywyRayV_cTp^s;a7Q5&-6(kY16Oh*}B=1t3FOAf|}56c7r)9nz}t zlL!zBzzOO3k4K$?^eKxm$UCI*m1PISzAVdws0!FBJlZ$@pQ2WT3NS;;TP}|RLIp5s zP23|W2o=B#@(XjX3y6s$K)$07u^r@1i#cec+7A0?vIbD0AT*jR<0G{08Ee` zJhrhDNZ)mLw3Inwj2dRL#^d>~??&#swFVyE;Hb;95NC+ZapEn27uHZGjE!;$#$5n1 z3C39fXrHl%Z-5u$+zQMc_A;l_4;cUQ*?&}kCDVAY<8=~nfTP?CLbOoS3r#{8;OUjy zSXASj3gnWEa{w|)#$5nJ80P>S5nCz7RVtNArBX@IS%3imXPcTVWipH@00000NkvXX Hu0mjfji|uj diff --git a/helpstack/res/drawable-mdpi/hs_accept.png b/helpstack/res/drawable-mdpi/hs_accept.png new file mode 100644 index 0000000000000000000000000000000000000000..64a4944f7531ab9fb745fd34dd00c778cff1573f GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}b0DW=|K#kP61P7xwZt8HzYxyd7xd z_anOJT=vF;=6o%TO%qmB2=N*^J(z8E{F3t0DRy@o7f;`BG-3LF`^uk20(J8L%76ab z`e&B#*^~M_=S=wbCso$$y}1B}pV4FnQGw$lhbsAU91yTDq8VqrRDCT2%z! zlCFjuAzofyPkw%WF8)G{$z$4Sr`Ehnx?CF~_C0uWbMx_+j~J44mv=IIY@G9oPvL6O zDys&W(~b?S?T#NE_ONCgNREo?(`GShyupy7a3LWQ$UDury5WbkK(SyE%hGAdx}1%w zSJe|bOLIHElq zgf&8S)K{4udBjnd73o*v$fC>tYr#ba)6*w4-=;L)n3QPIc+u_U3T8K127v^Ig&wuM U`^=cm1HH`P>FVdQ&MBb@0H(it4*&oF diff --git a/helpstack/res/drawable-mdpi/hs_action_accept_light_img.png b/helpstack/res/drawable-mdpi/hs_action_accept_light_img.png deleted file mode 100644 index 41107b870a6cdf2fa983574294361cb545ad68ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GGdx`!Ln>}1B}lL?P7vu~`SAaLeVl@yw8!b`j2|Tx@*Jk8 zFWUOlAxlkQwPWi!zA5J&Ze6VcFTPZtRc}1?JvSDAtwC4+o{u&F|yKCK+mXwquU}R%>+m>-ZX1@3)pc@%HUHx3vIVCg!05Z{80fhdEP)p5$jBPJ* zC^7OR=)%I*qQf1<=y5M92l8jD15B>D1SVn@um!d0AV?dCpj?FYIP`-*YC1xLO+C77 zAb)Ogz>@oN&^Hv;5aG?(toc=|VLWPZH{{Z^QzdBV5Y>w;Gx8<7kU40^bn+X5_=M%b z_T2}i+=TJYuc^7YtED-R7&Wihl|3kJ188;#ZQ#Iia}1B}lL?PFTU5oSYo5@JuP(Ub%IeI)kRSLLJYM z+Vu1D{<^J_JR=gJ$Ft;6!wk`mpN$dGUS6-xe13ku{_;^qhwgpMx_j7CW(7RrNb_36 zka1DnOZK2orqYrtf@iLr;GAO7G&Abv#29yj;LSb?#|3*VHcc08&6~)W#H?a>u83(i z^Oc4WLtZZ5HGK(EFBZ*V?Y6Pyof^?U!Vm`5PP8OfS z^`cc44ML|^UQ}3kqNq!TLDw)_W8)ktULj9~;AxZ8ZZ?>ExgXS!C}0psV0bxuq6xcS RPdm`N44$rjF6*2Ung9m%bvgh5 diff --git a/helpstack/res/drawable-mdpi/hs_action_forward_light_img.png b/helpstack/res/drawable-mdpi/hs_action_forward_light_img.png deleted file mode 100644 index a19e7f4e5f3f635467074b01bf6976f07a2bea6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 277 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G+dW+zLn>}1B}lL?PFT_W|NsBxjE3(WBJVLANpGl-+}W3~ z=s=OCLMs2$Rg52fiewzOF-u5F&SzX%qVUhBQ(0oA0B=HfqeR+A-3f;q`2P5avj@E5 zaMM!r*d%k%<7tfJCS{4t38tP!EXsXvo;okIcIYc`c=Wi0#f)9Txz-`K;i{ky4>J#2 zya-Q)lFX)?1rFSc7FEDtz`njxgN@xNA#0_9Q diff --git a/helpstack/res/drawable-mdpi/hs_action_new_attachment_light_img.png b/helpstack/res/drawable-mdpi/hs_action_new_attachment_light_img.png deleted file mode 100644 index 1d265aac640c1150acfee6c0c4162002c6de093f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 415 zcmV;Q0bu@#P)pyRRu*@TMcTIA zL-|1Cy6$sP13-R(I%rKbaE2kxnEBpJ_Q+ZUgy*RU zcfmTeVt^zE5>7%TN7gUvVb}gM*}o*Y@&9khL)P({&6yHf4SeSGu$S1}nt;qAhQ z#k+dWTTyV4$>$>P%K>$pW%?fS_pIc-FCy{EsadQ0-IQ>#conJfZ+R4ZLn>}1B}lL?P7ry(@c;k+=}bv+QMV7bxcdopm@~>w zbn|XEc*My#Vd?LMcg{QPk!g{Xl(fHmlrg|vhdC(A!zrYkLzwYrbVg0UiY0-@Ssa!R z)c6WlS+-meSg^}kqVq&wx`#pk6BDN%<}@bFWFcF(EzTW<3>xAqoKLe#7`Sz_nKJR+ zWGXpfTy%-y?7;?iMsC42$;(E9n*=`WHC(HsX2xLIN1wDYT-8<DbRq+jnScjkzq|rUH{>Fp=m(RF?hQAxvX!Uo${1#(|5>zD0q0HYfCXgVXDC;txVN56$fAW6> z+Q*+bffG1^6F7krIKfo5CwBr8@gd8*#F3XfBNFi}%N63N%bgBM(B(cUmXTs0cd8^}lW$osvy7UY zkI9gbD+!o##3GKF$$5jsqI`)H$qt6(By4f@ yjpGHMOU6XQ$29P<#s*b7j0gxA(WXL%mEaEsb-mu8WIsFr0000gP zV+x8&S9SM$>8f5Djar65bX_0!eSg_7j49>dp64}P*L{NhfPJ%V`#6r{QB~lv<2diI z39Jsg4-&6fjkYpy=oy+?<_CdY`Yp?vRt`=<3Kp1-APCl#fMdCR{PkoOhkuXpD2iq( z2Z!AjHL#Nvq=+A>1V3Rr1BdMv)AE17(=;7nKYVWv1RTZK6Yb{T2FG4*4HA5XXF4Y9 z5DW*(Y@SS|;9}_$=v{W9;D(#y$;Q2oGp8jBj`0(SkA0f}2HiqW3%;HpLG8%=IpPnv z4-QHZ5X+qx4U?@QwjsOhr3ql-a}2)!;!f9Ob6%PNUpAr$lROFL6Tla;1y`B?1p~ME zu;3&BY%}ltrjM~cVDns=ykgul>~-FUc@CvXp!%1@L^o7y&#q~ji~ahBVYrIER|S2+ wxW|I;QrTPaM=7WY307*qoM6N<$f90%}!7Vqj-MLQN3u~X?@6(698Ptn$965NXjg1a?`jdfY0$j4om*d>tG%a zfa=RX27q;!7HEMMXn_`Jffks7TY_KQ2ZB4k12RwDlSu678UnuA7HR?oF;tbz zwh#*hsTU^7nK+dSkw7sw9J?}>%Z*(+vKjxviJ!j@`~sPcL)Y5~j@1AF002ovPDHLk FV1hC8sXG7w literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-mdpi/hs_attachment.png b/helpstack/res/drawable-mdpi/hs_attachment.png new file mode 100644 index 0000000000000000000000000000000000000000..b16a950100e54d36544a7cc3102f874da14ad7dd GIT binary patch literal 399 zcmV;A0dW3_P)4=MYgXVtvs7HoJSWru2YtEc~ETVWc7`%<>9#>498H%zbaO2ktmma12~4FC#T zj$O#u0N|F0FGlQEw=V!tcp?n~fUbyv5l13=0ANf0-N2cMRRC}-;<;tbZHhQGVklxB z0IJ(BYp&22u}|}XtC}i2kg_%EPjmwSychA(HJ9t!)R(dYHC~Ij3jprO6ur?=3LG6$d6YfhF^|VxtJ{%AzQyO)tD5?812jES^ZWMo~0p3ELmyCXnX^AuCNiuq+md zN^ZnVWoaypDenA%1shxX^&Oz$cFZ+=pz{yp+gzh>)GZ-L(D@alz&awXhp@f%3+Q@| nNwR5oco+6^z{A7C<6q$mR^0o{9XCWG00000NkvXXu0mjfv+t|! diff --git a/helpstack/res/drawable-mdpi/hs_attachment_light.png b/helpstack/res/drawable-mdpi/hs_attachment_light.png new file mode 100644 index 0000000000000000000000000000000000000000..186c6aef6862ac5a21b95308de3d19bccb716446 GIT binary patch literal 403 zcmV;E0c`$>P)B39LM4Bv6&fX>1{8Oja&h936e{&7?Gv2pQ4o25Emgdv6Yv-M95N;+<u zrN1-7oHI;W{GUhiJkRrbgh5t0rACwVnmn<`v^pVVlRDkor=agK#y!7vPC@N4#w)RF zN{o|JY805^kl3EuA>5l4xRbau8vL zlo|n5OhrjFF*!MiFvCiTfOTS1N}`6Dkb_Ii5hLn|kRnxLJ8H!VW=Rg_>Bbp(wPFQx zL!TUMk<|`)wZi~!n3BF=jtlB^*5H8(Q~DldOhi$=K|gnxh!TD31x9%xcEd80z5JkR^*J^ouBorxH~AC;R6%DZ24h(Pqs3k;S8RxelF{r5}E*KA2A~U literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-mdpi/hs_disclosure_img.png b/helpstack/res/drawable-mdpi/hs_disclosure_img.png deleted file mode 100644 index 32bfaa93a247fa3211dcfafe65845e81031ecc96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJtDY{7Ar-fh6C_v{C#+y}c6R>R zxM}vq8#gSjoH&ueHocwfvt z*@J~!)tS+m>1CQ*RAwCGyfdMbOnCUBivF>5sNVRQBIFaJ<}>4m)a=3ghylE3c2%xjXsc0z{Fyzw{Joqi?vh|k>Fb%|&7*ZgcX-Cywh rKBv-wx%XKF1wV;r<(2c81cdTS$sUS|W!^RgXa$3(tDnm{r-UW|Z2YP$7e#!c^^(-Y0%@RoZ*qi`F<)`EKq{{v+@Hw5*sR zFA(}!c2Utj$B^^;IgbBnE;xI?rFh=CsojiM7+vgNGclA;TJ|n(&Igb&p00i_>zopr E0CTxJ1ONa4 literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-mdpi/hs_forward.png b/helpstack/res/drawable-mdpi/hs_forward.png new file mode 100644 index 0000000000000000000000000000000000000000..27767f1326411dd24dc69e87fe30a85154d6b3c1 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}b0DSWg$nkP61PXKlF}3`AHS?ww{Y zF02#QFT*b|F+vm9)wmXL{3Jx`WpH%;8rubwo@tA^xt}Eo9ooSxIZoi?< yd^OLU_!HYdiT^a${y9z8Sbok-{&(k@cQAfT;{16naLa3;MGT&)MM8 z>nw7=#%#lV{gUfNb|vH5v@RAQMh5eXOG;j)du~!Sd39iNz~WXGP9c?V6V;bk7pQ)G zd*F9>SoU7!?fabLFRy=b{)_Fes00K1=^RT#zopr0I2>qsQ>@~ literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-mdpi/hs_launcher.png b/helpstack/res/drawable-mdpi/hs_launcher.png index 6ae570b4db4da165fada0650079061cb56aa8793..c133a0cbd379f5af6dbf1a899a0293ca5eccfad0 100644 GIT binary patch delta 2195 zcmV;E2yFMk9i9=8BYyw{XF*Lt006O%3;baP0000WV@Og>004R>004l5008;`004mK z004C`008P>0026e000+ooVrmw00006VoOIv00000008+zyMF)x010qNS#tmY3ljhU z3ljkVnw%H_00*E+L_t(&-tAdkY!ufO{?475^{#iq-c;^Dmy#{tlF zn2UDq+?oI&B7XskqVt14KD48|Z|2gspW4!NjY-f0yVrcCZHvtAf9?KnMZp(|!29oH z21uZ${mz;f0I1iHfV!f0?jb3Sns?v0Fc8I9Q3%Mx2i|z^lXDZt;&r^?splVDAE6(G ze9B_k_1t~y<7uqB@b`&Ve|zw~(*U>@6A1>4^+}vU}5!#{kHC?rGQ7Y+rpxY>wQfCgoNV z##{y$v463{hy((3%FgE0mkO8pmxuQL_0*X&X9@tszTe&dY^o8DoH+W)6TkU!{|f-d zucik8K#j-at$U7ac&)yrw(G(v+1D^%X-_oKexc~|z&2o8`~(1inTzdgD5K*U-Ze2| z47GOCTVo$ho!tAtu}uIn018np8&wEEqPutLU4PpTbRPo<4CzExH39p7vh;rX*vY=L z?+*0?n2HKYsfNJv8hbJGL1hvZ>p(|GM{LcbZNFD*c)4xWqGdTKXsRIOeX_>WQs{Z` z@x`woLeZ>5K-qqvXHR@C^}2wEf_H+uvOKW+ChB;@_g>z#6BVMQTqEszc57GTXT=d8 zL1ChYk%#g27yiTmWxn;r8 zQ^yC#!p1Gx+V$jfPz7dN?& zCr=};q>z_WI5qkzE{vZH?WxAmmVejkpF4l@<4IpzfWBz!O0KH};#~Fw&Sg&&trVyo zP$TR&IeiSrhks!!mK_HGZtqI>y$u}pS|TWfltiO?UnyXmA1@e=2;RHZa4Cj@cGjC@ zv)B@3@E`(OGDTks8_@YLbm9Q;-jPDVhRB?`T5lu*D^_&WYH_M%aAd$v;D2G@1Iu2S z(D7D#rADNeE^SFvB0#O3^{I+TL%@ewx!TYPR0mMEqM;U^<<#ercuI}svV~zok`QFL zlqDjDm@E@z_FOmem(+`3@1;Dc^JK9vWG9aTVR))dSR>%&?)-GA1XUaMCFz8VkYb)BPL zi72XxP8O`x_T&K-mrdI%c0L3FF9Y5ptLw9s3t2#QFHb@-Yl4)e&>=fXsTBJprL&@y zjrSn%Y!B`cUkK>|`;AH>RBN+kZ86NHwX}lR;OSF=2lT?M^v&&k@wYz>U7FQ(-{Cn( zoQEA!7>Z(V7=PIHZG-n8OxZV982FhPIq{cc=P!FP_--Y}$7e|z+CLU{roXIe!oPnl zBV=vZ?1hKPT=&@#I#I3e)XGijldu15;2R&jf9Wg$-94vY6ae*_hMN~IYi?2$<%(A- z!zf(w1*u^eY=4iO{clFs@ezP509P1=rK|u@gKPUI)qkkMF#p_?_ku4+AZq*dBymIj zFXewDA7BDFxU!7^001R)MObuXVRU6WV{&C-bY%cCFflYOFgYzSHB>P$IyE;sH8?FW zH##sdyvITA0000bbVXQnWMOn=I&E)cX=ZrgFgH3d VFwL6zQVak9002ovPDHLkV1l;t3IPBB literal 3777 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 diff --git a/helpstack/res/drawable-mdpi/hs_notification_download_light_img.png b/helpstack/res/drawable-mdpi/hs_notification_download_light_img.png deleted file mode 100644 index cc4d9576b23452f3a05340287136c94b2f59e5d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1238 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGX)r!E=H#2u8yWoh6aX)u7;K-hL)}-PR@>Q zriSJwPKGeOF8Rr&xv6<2Fuf@ty+(!xrcO@IIQ4=OLv8`kW|!2W%(B!Jx1#)91+b^B zGI6`b0;hRUy(!q-0`Z3>PQCg-$LNEi7AdM>LcsI`V!{(HkONQpsd>QkUIa|owI#w= z85kHnJY5_^DsCnH`TyVkumh7?8zb9dK8aEW?wP+-8Z7u;F}f-IV>@Ep_=A0~i~`G% zK!-CtrAMq4=K1@xH*oda2h8F;wX9m|M}M1pF=MRk2WIb*n&qWtQ`nO%S3Lcc@v=d* zBe&s)w!miQkERNB-aQL@RIaqWa@Zr#@w4HF__QhfpLoOt;@KamB*{8>iQHj%l&0}p z-t0WXM|XvFir0#YE*%I{h~qnQCqgHk`H`K%KA+bv9Gjjf2^1@JHp*;aePuC;L3yUG zlCDA=!&lQ47Ii#FHZEbYU3ybs%Bkvwo$vGo%qJvUs+KZxtYJywR@ldXWcdlxmWhYl zG&RouKQ>YO1RtZAkkd2$5Z#S|KiT*GIgl2}CGa~i=;))5Z`2g#Ii6r#|r4fyyw@M>+ir$LGPVo;#@wk2g)LvA~nWu7_00000NkvXXu0mjfU?OPG literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-mdpi/hs_search_img.png b/helpstack/res/drawable-mdpi/hs_search_img.png deleted file mode 100644 index e16c6243a32a81959cb029f5349d5e0f2ae6842c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 482 zcmV<80UiE{P)2{6YfYZz|VxQ4-QSx_<#)S!KEH Y6FHuz6(JFc6ISQ^2_Z8gK&? zKnh3$Pyh{301bo!NCCP3<^H4r7XSsgfG{hqB`d-vmX_Q-veIaUz4DA5@0g-kVu?Qv zHKk}628~n!8$k2$9q52xrPTdn0ziIb@>n?F0uhb40Fc*6hJO-43nI&NG+qKbp8v+& zN$lIu&Vd{718fp?hHI#{k|Ni<;4MWy65++JbGTNKalezsA9?aSD%B$qhxy)G0`#~?&hQ7DWg!+qj)|D%1X3cJ rV$Ps%4xE82Ipy;Ie~Et^PXPu1!=KTV_gtK200000NkvXXu0mjf`(nR7 diff --git a/helpstack/res/drawable-mdpi/hs_search_light.png b/helpstack/res/drawable-mdpi/hs_search_light.png new file mode 100644 index 0000000000000000000000000000000000000000..faefc59c8e574774fda7a43bcb2214bd109eaa1c GIT binary patch literal 247 zcmVO-uP3I_MSk}u zz4yJ$&1J--q};JXhGV`7G#rzA0=j;3#hM==_F;TsE#X%ij>tU$QCR5&(1qCnQP=`P zf}xVIU~Uv90(4;lAPT#r6aj|bvrVQ0bYaY~%qIJsG3A-BLBa~mnPHK2b~)jiN8WT{ zW8UwTx=)yXzmHCs0$5^$Jx-bM#QUFs3s(Q9XoW2fIOm3!UPXt@3uo+kAnntJ f+zL`$lalfSE(3Y*vbZRd00000NkvXXu0mjf@9dA^ literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-mdpi/hs_send_light.png b/helpstack/res/drawable-mdpi/hs_send_light.png new file mode 100644 index 0000000000000000000000000000000000000000..ef59e77678dbd3f5d866bca9058b6e90cb8d6098 GIT binary patch literal 344 zcmV-e0jK_nP)&W`22C;JryNwK41(MIA#GvFb#~s zwsao25E&6n03w(GL@)`A!D$_85` z%9!`-s3_@X0OI`y_5>OaJWhc7Ux1pxX-=Z&t1o;=Bq}NC$3*rSV}~5rah@Eqct#)^ z#sARKe>b^SMWD8;A|0im5z9_QQGnQ=9+)gN{ZC&+5rBvy01-u99ZM?OT$kUFh@ye? qUBLr0?$ZKzW0Q{J0Y5k327Cd{Pq+sr^Mm~W0000t=`Ln>}1B}lL?P7ry(aO~KzLk?$Lv#VzmdU|+zo@82C zq;Qt)i2pqM`hT;<_!5o?Gb!Bv?!5DULxsG+d)w-7Z_IaDFudxJQc&$yaVc##cs!Yf zZLiQQ=7`1!-j25`L`_>{6nK_w+2|2?Rqx4ildr_A{*|-D zItm-4bcGeU8-Ii^o_h31TZ7J8on==TLskoOSUR+YiSf^RHKVoReP-In1(}n2n*t5E c7?^k%uKmjA;9*x40Q#K4)78&qol`;+0QxR?p#T5? diff --git a/helpstack/res/drawable-xhdpi/hs_accept.png b/helpstack/res/drawable-xhdpi/hs_accept.png new file mode 100644 index 0000000000000000000000000000000000000000..2f6d6386de9510fa6dd8c83cbb61a6f2e0fab9b2 GIT binary patch literal 277 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%xcg?s&R5hEy=VJ?|UH<|x2&QEUS@ zUqF*g%NA{xn*DVG1~S@B-uDxXPUtYNKXnEQ>b^wD=lt6oW;%QS1o1=daUAyI8~(&3 zd|u96v#;i-{{JTZcp&}h>FMeJ8GvN{`tw#N{;ZEGUD<;p)-Lh7=#>`kZ6pLOOe=>Nw L`njxgN@xNAv*3Ko literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-xhdpi/hs_accept_light.png b/helpstack/res/drawable-xhdpi/hs_accept_light.png new file mode 100644 index 0000000000000000000000000000000000000000..d670618c7e96225f7756cb4c2743e7ebbf688cf8 GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%xcgetWt&hE&{od;P3vlYxj!B3Hnh z1714EonD+``t$ZU)3IJ|2aboi6~%ilJM7!-={Kv*@R&q$518Ox)_m^XpXp1^&DOu% zB6r^~@kqJ%j0e`LXFkL-JviL|Ir_(khlktwLa#r83bn@|VwIw^gKjzH(>hUq>tlAsh9~)aj{(R+p z`Qx=v&?j!r?}<)Pb+Jxa|B9Td>MRd7#ru4CATBh=u6rtHD$5rQ^8CwRq`x!iF{!ymgfZk@ zZ-HgQq*gTHMd+ntbm7eIi(t9~8hRf>n93)gTG3=+N|Fw5M^hDlfVmeiMOLaG6Ex+p_`b3N0000000000=<_eY0BfW# U&Otv?od5s;07*qoM6N<$g1eK=4FCWD diff --git a/helpstack/res/drawable-xhdpi/hs_action_accept_light_img.png b/helpstack/res/drawable-xhdpi/hs_action_accept_light_img.png deleted file mode 100644 index 6ee32b64df5f43346d78bf38a30c6194ae37e6a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 475 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+7;8OU978H@y_t1Tu*pEcwX>Z20@IqqOj{Uq9k@3ze9U9M z)lmL*9cu(5Z$ty@gS0m0_72Y*2ipFaZ*FFOJmGtrEg@N+t&rB zf~VDorivcQ(D+nh5!jo(T)d>t_y-MR|LI)6<2eD96V+>(Eu1DOz27U4CETR)GfdlY zzQB@`+vB))wBSU^Zb+VbF@dYdv3Y<5UL)&Hv@kxmj*|Y|=T&#{{$z4t6Mq+-6*U zIn%FyMwF35tyk90pjV$Cu^Dvj59oH=u;G?KeoDt-S00B``7bB-T{v8BmmiR>5g(|{ zwrs<_S&G%$%PN~bY0STpHaokaX>2p%zX0FZBzcT5`+FO1mi_21S4cYczFEZM> zdD*_;<2Ksg{vO^w|3$x(@w)dsAD>Qg{qMGE$ut?OhWEFn63*Sp&=+{~)$66}QMrK2kwPEjvW|t=YKC+DYMIozEOyP!1808KDD+3( zzrp-WM^EIDE>Ka@*%eQ@zRqM#3fnCbYqMa>luOmO!^6bFcsx8i_8ixJptSOI!dh;{ zFve+5M7bRW?(l5T(eU_oTrcv#xy=(-&-ihAFSAbXR`$GDSv9`aqG|cYMos!>ZMloT zm|iHd`RP@r%AxlD%p&XihL?N1m#kc|+?vtznb2Ie*Wb$WydFCn6fODAxQ?Oxb@InZ z^~>ALon}k#+-m%8M#a_6&Kp7d-|aJLU!?UzeZ@LvUpEh_yhOLntndf{G9Ik^A(+5$ Wx_6(-zl0<4AQ?|rKbLh*2~7akHS9S*$fRv3h}8 zcm`IpXYe52tcl5BCFx=^n0-xZ5fKglcki$FBwt9HRL;?s{%Mj3A%qY@2mzxgiVXGH zDS`aPUeHr=Q=mUg~ z5JiBH5qd3dUl$}Trf;_0Y<6W?o_-ymzIR_naTJbi%B^3(x5cYyLI@#*fYCI~Dsu9B zi?hW#YVwzNKqMq&@^;w%eEhK3rIc=7zheeUzW$T^i-pC(^G<*Wuq%AD!>Q%8tAvD} z16u9`x5oi0fI$LW09pct0Hg#O0VoMn0uU1D1b9oJ6yPa=R)CiTY5^V+=miWdVH5&} zlrS0rLrF-P1J@k`d$Z{{S1e(k`MqV&z$|>0(%BMb)$}N;CrnX55mOXUG!Nv?0e6e* z6emIb4eCWmufkdkX*sNdNYLad1%xh&hAxYT-WUnJH5PhvH1zg3L-MeCKu?X)wNHqx zMaI2J3O)g%+vHdz#7zE6LflqaA%qY@2m#_LzyLbr5>`VielP$4002ovPDHLkV1oQP Bp_Kpt diff --git a/helpstack/res/drawable-xhdpi/hs_action_new_attachment_light_img.png b/helpstack/res/drawable-xhdpi/hs_action_new_attachment_light_img.png deleted file mode 100644 index 41cbab203c21ff1c4dab07b2a4848800576b0b03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 753 zcmVe`Px5>F7(Ndy5u&*bRxAVvB)_+>4Dw^c{>CB_tVy2QZR8tSFx54ak1hZ=@=*og zNIu#k*d%$KD1kDMeFli;0Zo(FF#=|Z8p#QCn2^sfTXdI<2V9uE#uQJ6|1UsW$k!5} zP2__GXdC&UMG!hzw2i#C0C-+69Orp<4Q;)u|4j^w=rz%x3{&rclTX~l)SM%Saw zK{n<{Bu4K&0J(kIs)$XVrq7`L>JkFbPJUUp5~WJ$SVh_v7J*`o{G43hUpf?CJJyNK z5${OK?L$4lFQ9;_0R*4mk|r@V`9-Sa>j-d5^L7>y^y0U$%-bZ%`%Zy_1+GTuoGf`? z0ZO_fc>IaMhP;;mxYbZEm>@Cst%_pD}@$%9JYzzg7?VlL9{~mcg!4@;Ny{XR00000NkvXXu0mjf9uY{i diff --git a/helpstack/res/drawable-xhdpi/hs_action_send_now_light_img.png b/helpstack/res/drawable-xhdpi/hs_action_send_now_light_img.png deleted file mode 100644 index 2629040d110af5f3e36a37f4073663d9a8b8ce6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+7&m#kIEGZ*dUNYy?jZvKwuGLFR0g94$phRa4SE+?XDlu* zY521D!#Sq23}+c)8yGKbe$vhnIQ7>#zq(J+n;bYDcj}k-$)@g&s)!bDU|>;TVB~OM zU=jc^5A4mAXj6ZATQ$95`aeYu_L7d62EQtvKMi~jjl31us`uThnfOm`ck#PV7Z^An zYRK=F-n~GM1+$t}XPoajoM!5l!FbC={Y0+% z%Y3Gfy;h>{rX06leyL*WJq4yOZqE%RTeh(z{o2lYZgo_q#anrfLzcZ?v|Tv5pBBV_ zU=r2mS4DYKLfpJMSGXg#~POscdInEzB@$;AvpAEa>L>aH27q;mt(m?F<|z z8do!1a-JYt^xziHhZl|6j7(JzZnZ1$f1Y&Zk@S6G6{G-VV4QZdjzxkYxbs4HC-v?i27x6njw=~3DgI(+l6O&_ zEV?47c*=r%iSaQ> zbua$XKf-U)X0WLB@2_y+4%<9au`Zcw#xph32rupThI(@rNpf2rDDUy!zmflRM(OsN zi5GfYS&Gd3CkY-hd35@Q$BcHBVzVILYX&WaKU&x}-E`!6{GrX3eYs6#nC0=PIq9ME zJhtU5PV6yw|H-vU&~0Obu8Pd;&)E{u$8R3eEvRX8oa40oVn(SC|5+sxcP8Hf zG8YhsCWu{c_Q*OqcgkMI&yRius?2?KZq8mt{Ucv9w|$zPTO(4Q^o?!KK?@o*S?1DL&G1BEZq(jL7n&6UiSHUN1ab_$I6;{L#j}Yuf7!FKdWC z-t}95x%ZD%RTH`jU2Mua8J-HIM4q|gca&q3l3dNSqL;#(RX741pRE4h(qHt!c=le= zy*FLjxThRuI5wM?WkY9q-}U|NK{x$_&KNizwQLkTC$LE5)y%^j)*l+oB_5`5a(?wm zY)P(g;`WZrPh5Zc?BhSL^)I!!e@T#8S0E_g`oY-2C_6-4u1Iw9Q=YvnC*3F5r5Q%X z9ZP(8k312Im zA`|VTvQ4phMsk-Y5M1vft}Pw`)lP PlRbl{tDnm{r-UW|iB(ts literal 791 zcmV+y1L*vTP)8}#2>9TG*QWONZ~YGJ zz+p)yo3Ojnojo5M_IBp-ot-&zcFv|!0)apv5D1O|(v?c(isLx9i^bxdQmJ&k)oPte z1apvGfP5*J%ST*bh~GHgx7rYeLZJ-u`(E-M`CO~jF4#)`KoQ0HH@x*#oZrK76LQF& zea&XGr)?(RflP26_=Bss_mho;N7j;Wx7#QC=~k=Nd8Ydh=Vuc`UI9~KUFlQ#M3Hw_ zi5goORue^Dm1Tb5fpz5J-OuUDBS3n_ra;3g@)*)}+}nY(yEb6{=Tvzd_hJ zdOYjp^Z84jxqpjD$8s4Qg**v{`9`ej6VS2O ztb=d8J2{liVb9-KMV{V1`)2=}$z;y=*|Ayfw`Ui7@~-2%J8VNDm&;vdM0zkt1?SZ; z$U|?EUJ3~=(@_lnm#U+bsL*t*qe*QA_U57ciIts*!T|4?0j37&f#4ag%cjI;ki*`n z0h-O`^bqwl#R`kJopV1w&j z9M@=<27%B;5?tTJ{ip7;ae|yVN|EUVb#_^v@P(fx7h$d7=~uTfSG z)cw$J-9Fp@5XP!7iH^SDpT>O}-lv`1Q4^W5Fn|J)qyPCJl)By`p)@ucZH}A4rA#m_ zwK_rlKiCv_GDLSJWgCn+K{0?BKnx%T5Cez-!~n(t;)s6=%OrgJT_6w$1Omax_zy9? VNm{enNWK67002ovPDHLkV1jSUfye*= diff --git a/helpstack/res/drawable-xhdpi/hs_add_attachment_img_light.png b/helpstack/res/drawable-xhdpi/hs_add_attachment_img_light.png new file mode 100644 index 0000000000000000000000000000000000000000..771425c91a6eb306937c3875f56173aa95df6cbd GIT binary patch literal 816 zcmV-01JC@4P)zWBz&`3(JhX9C z(OtmzsBP}YyR`?{K^5EuyaGPL7+v*^vjeD{yMPYcQJSk>F*%;}5F!6)BMOLA5lh6dhm( z^%UMUHjLVi4)7yt`dWZl)Jk-K_fgB&0u)g5(E&zL$0S4Fli~z55*;ALDeBeG_spQm zB%=d(6i~m@9_o$+d;V83O28D20s4|bXe8Uq|Q0viu1oQ%+c1gE% zx`!g5#-amgKLcu`1ws#-fLg_i12DibpmupI;LB44)DivB0<@E$*~ uO^IrKC4OUtd7dWe+Bfy#X8;4Zu>S$g5HT_#6{Ff zsIAZkdhE_kqIhA$d0V!~_|RQC3xSF+~m)Sax~NS<1qphcBoKWS=M0a!BX-h^k-~ zNO1_a*+x}3>s;hO93G*LMAk{+o5L8YAX{YVr=12O*bt$a>%1UWu#jr;sqouhqK`U) zaf(Tlk;i`5zB2NcL23w+!vOz`9Vvxp=P+;GWm>6(0hE>r@7+HbAN))smErJ4yN(?a zc#_8a_8Y03)5c$x9z3WrPTgHvDK17Y)2yz&KlfRGm0ux+?_EFw2~6W5z}%0 zIHBS23{{YACb`Qcnuvy>!VoH;Sd(EZ+yx-TOt=ex!!_nZSis=W!E5$HSilhHGQ+%O pkqvT{Dj_{#i^cwQI{hS@&CX{s znPtBO>%T_3R2RHgQmNErE|xd)IL@t(DGv)jg`EBeieCu! zdk7irg!0duOnwI05jTWKEYt<>FST2GDOmp%+Fk9Tct1)c5_hbX&*$@rh6&H`J{^rl zdxM&zkOM}r$1iHnAMx`Qn=jw3C&Ke_M_kGS;_>)h9kO^%yPl+$>9yNChT}4|487`7 zR$QC_k6P^meO{=&uiALPJ7s_mCS%ZV){6v(6KTBFUJ8Z6LuG((t_^^J2Wrs?g9Yz< zbwrvN0AVnw$COH?YsSh;=LYv5HE{hol`qaQX3aLE*FvbR5Rea|btsq1UDgILsjj5> zPzEdeod~gyNu|SAn;oT zqtr`@L?YKEJn;P4Z3s6rz%w<$mO=jq0WFEwtlTJ>O!nzw0wEDM2%Cj~DZdK|x06V8 zG4UNT@VEZeYV|7mO!<9rk~;v}83~JalSx>Y!;pRacDvQMSS;2fv535o^it&RBB9u} z;!R@vL>b{kE<{*x=+gWPBwtf5Lrq*w!eR&V)9s5!mpdmL5;8OBf@&VdPt%iT&!ylyK5FvyRLI@#*5JCtcgb*`+1NVd) U6^lZ09RL6T07*qoM6N<$g5mc$eEWdP)x1ERUm^YGA!|#wXvT`+k!J-j9dmoO8}O=bUrSIp>^n zE&(H)9r~@tyV?&T=6EsGD5+aS%=4^m7MNjzBjl6;a*XjY-&3d63WwAk=6Ko~XF05% z;58O$bxGY|npTfF&q4JN5$AY|;2d$+)fpmwA?|mMsxOH65wpvP zIzgGZb&jfUc%24jO34`F9_A6p)fNTLP-T-Q&p|=_fSFe^P7!xrZBgMqDNqofVwRPR zCCnNJ6~qCqk`e{+2BxMYj8Mm%RU2F-H3}k+sVfO5G5>K`K~zYQg2-d)O2S3Vf`TY; zpA;#GaZF7~xP_Tf5NC+{lhX_<6O=K_O2QguLP1n9fAF$0!vbbrN!Y?1Q4pJ$)5;8E zG%#f)p@GRMh$d!O86l#I*`=r?G%z^@(Zm#$5xykunv$`Fc~wDdVm?p?i1>;pmj4G{W)d_B4W)#FUajSgDh*ChFamp;vpw%4;>I8F`8w#Spzx2)n z#?=`nG209)h$(vI0VmWcitJ%NR~uZR7w#~wZm@{?i=2Wuz!kF9V3vZq!z6KEt1Zg> zLpFA~#xZq|AyzPtc}H!L=QEc0n>uNzQ)8KV$`rLT`>x1nNyaC z_=vk?N?9XflAG+25%mT|-e;DdSmhygQY7b`bIv*EoO8}O=eqDeW%vgQ(2UH)00000 LNkvXXu0mjfCPila literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-xhdpi/hs_disclosure.png b/helpstack/res/drawable-xhdpi/hs_disclosure.png new file mode 100644 index 0000000000000000000000000000000000000000..7522b3845a9ff88b2e547c55d4377a1852709a34 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%xcgx;$MRLn;{G-a5$3=pfMgFq6Ue z((wi6C0k`ws&6#22ImpcFY#?PIc&n@i?9~!i$ ztL3~>a%^JZ6jJe+pa5q4yJBX2;1BpG`0kWHShelF{r5}E)$;!HaL literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-xhdpi/hs_disclosure_img.png b/helpstack/res/drawable-xhdpi/hs_disclosure_img.png deleted file mode 100644 index 9c136ac4ba82a8db66010ff1e9c1b4f77b4234fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 513 zcmV+c0{;DpP)^>%ilQirqA1E=V2oKrEHG;Ch@xl{@fC*Q2R`R$ltXYg z;wTsY6ZrmuOqdieKFhMsAPCOO;!7snHk-{Mh74G$GN3S_m8NMgL-E_Tnc(~WNuDX< ziy-dyu_F_9#AiXhUhjd>OPdLZW$`8?Niql%ZmJAGvHZlRFWv+^^Aj-P*^&jXaU4%E zbcR{PyQLo7BZkGBfEi%kQ4cbh&?nvm2;FdWhEvQ4T@3B36B`0Mi~aBsF(_?YQnYW zc>@gXam~>lFY-ke1`~E2gVLe+_DF32YQQS(BS2jQ+qFSs%$N>BItuH{kgV5Xh}@@r z9j0CopSn=()#&B&#bi1S89EHFw+U;?OOlc2DxQ@u+ z_dALsGDY#@JS6pN=I1;nSBCkZq@pN_q9}@@{A0cW@jrTNf1}KD00000NkvXXu0mjf DzxUt1 diff --git a/helpstack/res/drawable-xhdpi/hs_disclosure_light.png b/helpstack/res/drawable-xhdpi/hs_disclosure_light.png new file mode 100644 index 0000000000000000000000000000000000000000..6858f02b1dece534f9262dc2ac2ed13301d1be47 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%xcgrh2+KhE&{od;K6MlOu!k#Y~6X zpx+W(&9|8V^t@!wntd&6WQwJ+p+1PTqbq@BWMl+0$kT6`h(j zujNhAWCh127EU1*j|pH#z0`*FdpZ4?r19|VC$)7R5|L5HPQl0ue y$thvy<2^HG@At@<^MB$6tN&9k*vJE|X^`?i5X2&#ENa&Vvenbo&t;ucLK6T|$WlN6 literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-xhdpi/hs_download.png b/helpstack/res/drawable-xhdpi/hs_download.png new file mode 100644 index 0000000000000000000000000000000000000000..8c83bffa7e4443c2f9bc5c037152366bbd2b2a8c GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeG3?%1&o4*=JaR&H=xB_ViXik240LWr43GxeO z_}|d-YF7`CTjJ^B7*fIb_UuMphX4_Wz@K-epY(rm$rSOv5x&UEQI+e--EU&)I|8Rx zn`YUVUt2QqqO7p8jPYX2Y1uALFv!Bh(&V7xf`I2(I$9v`=tPEz0uwjrB`PNJK1xr$ eb^X}yRc5jUbNLGR3)cYcXYh3Ob6Mw<&;$VajYK&B literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-xhdpi/hs_download_light.png b/helpstack/res/drawable-xhdpi/hs_download_light.png new file mode 100644 index 0000000000000000000000000000000000000000..ded5652e406a8bb0788402b1ea2034968a241ead GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeG3?%1&o4*=J@dWsUxB}__Fko@OdIgZrQWE4B z%@VZ8#xa<@HhnOS1viNAnEC})a|0sJS72xJ-2)f?&QaR z?3aFfZT$|bN3Ya!ZWwgOIdJDMXyKo5=w(d|$6F^2ai?7ZNyM@uS}y1~X^1JRa37T8 i%D!pbm~%M(0r%^vOJ5j@by@-4#Ng@b=d#Wzp$Pz$!&MXj literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-xhdpi/hs_forward.png b/helpstack/res/drawable-xhdpi/hs_forward.png new file mode 100644 index 0000000000000000000000000000000000000000..8b5a68183db0af5ae96767121f57a6a5f4290587 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%xcgmU_B4hEy=Vz2(SvFhHdB;daKH zNwqO=cz5sOQOQqHa4mlH`yJc4`6h3dFf%Yb@P1Wzuy3*ZbG12c_Un_L1L@~Kj znKyHTq&TOLipK;6$0imSqouWK>FO^H{i-EZPRrFeK5$IE{(?Wpc>mF7v-AI5{qucB z{=T2j?*A(SlJC!$->>-`zQKR4edwz{D}$crtFHp9d;G%&b#ZY~ORu z<%C)CSAk7u1Q}7m!^6tUvNG6fx+hE#o>atipl5x+Pvv(%&TLxsuluZd{jtyf&t~WE z`}u6Y`Tv}KKR3_WZ+5@t^V#_f8&=M%SLV6;*_|Wzb38}y=lL9KKfiBz_7muWN&j|n Y%N<#k$X1qa1#~@wr>mdKI;Vst0GCi?UH||9 literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-xhdpi/hs_launcher.png b/helpstack/res/drawable-xhdpi/hs_launcher.png index d4fb7cd9d868f1d7d9964f1686dcbc018ef9495a..bfa42f0e7b91d006d22352c9ff2f134e504e3c1d 100644 GIT binary patch literal 4842 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 literal 12516 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 Sweo^WZ3a(QKbLh*2~7b0eH0o1 diff --git a/helpstack/res/drawable-xhdpi/hs_search.png b/helpstack/res/drawable-xhdpi/hs_search.png new file mode 100644 index 0000000000000000000000000000000000000000..6381902686163ea2671b9ce56e275afe393accae GIT binary patch literal 464 zcmV;>0WbcEP)qmm|Br0Z<*XWN7ITU>j{~Prc+$enwQKUMGw$gnG_yC$`NCG*{ z;&A9} zBR>#FFVw<+y*-{8S8UK=fkm2Za{c>?(6_M5;U|5JT4so77h#`Pw6By&Q{mob*6{Y- zetnrN6?=;(JoW7E`{Y?cv<_a*^w*PCL5Y$sxIi+SaZVl4jtI2I6Oz)Sep;~(3D)6+JKh*G<(-599TWq^Iv|SU_$!VO zYo90%5o?bq4iIZM{)!!<*pI(rFZKf1jre%AGp|tiAN>M}3sYaXitA2Qkwt}b-3^6t#pSyvG5vB1#Yb6an*jH&EEEHStrNLMq#215#SpTi( zzy`+4rtUU-<7B-DE=fpsZ|BU+xihoPWE>nE92^`R92^{y#F<8;v5eKIR;%4wt+r9G z*VikR$|JmA^*nDel~%*J6&U;y>oW}gHEH4dWBm3IYpql&U7CBtTdmerIQumXJIU~{ z1romDx~F)}&a2lwtgn-d!x~`iV;x`}Vf~yy#t19Bw$Mr z@J>@Hd?-S5+tMCcHdvw%dZvkhHJJu1jx5w0k7W%&Jy1gc2bi4Nh(B;I$z}!jz8p-H z#w72mYlk_&G@6xef}P;L5n(qpPJ^->U>YOt_O!;!IYU4|U+qYY6CfiMjycSrA*Ts@ ztheTHm0FO|3{G!@0jBiYpj<8&qv!%7DG2wrQmZ9-|tX+@c9+UJgRo+jxcfyU4%M}i|EJ_$HtAEZhT;*!9Y zJ$0u-OcL^$G$INK2!EabSTPF{P&|EN_nApM!bqU!{|ns cI5=3qZ?PL_HbAmWDgXcg07*qoM6N<$g61inJOBUy diff --git a/helpstack/res/drawable-xhdpi/hs_search_img_light.png b/helpstack/res/drawable-xhdpi/hs_search_img_light.png deleted file mode 100644 index 19658e4a2acbe30df1aeb743ba5ac5e16a5edd21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 827 zcmV-B1H}A^P))F4ccon= z%S0lPNF)-8M88uiMW>g`Wde^Gv^o6>KYu~1pq-(elv3sB0Kmi-@VJMzXz@CNI6~V4 zjMJb2z{GK-H_)bmT@=vX07Nx705JJAJeCcwp}FS`fY2gd0YWhd0OaRe!_Vy%Me{E0 zRfX^A*zkA-2txQ60)VZ<*Grl})zNi&gP`q(K{z<_bpcCl9s z`rTL%YIGCm_nZ>IUBGuXj+O6huF%JZVu#kWMR4sG0Ibr3<*#Lk+5ezd+6}apKBO)E(gmB7F;Y~X8n9j5|zKL!0da@1;E^~=ciKX zI6Sf01@ua#Jh$6@PqyYy60G#^@OpbtCa{zE^7-T8{=ad1r zH2})YOe=UyF(9z4+yZdq;sW+yrj!}R){~>S!Un+J&J1HFD+KhvlsI*X%nJZjZ$GWw zU>#}l6Gy83&MF-?24%*Adn#sho&3&`YJac;KoQwagAu|u#2v`&_l{(%&U#Rnq9_(e zUL0oyOlJ>Gr7Vi}PYwD0Csm600r&xe263dUu5#@0bB}XGQV20FM!Mb#nJI96#UgMg z$jMFcz2{iP(pXnx==)1*zHtC2{jLL^qdI);RJw`*A@=2{uHh{jOkBH2;o9f>grHIe z7)qFIi>TY2?XTQCMTd|SKu374tuZ=;yNs`99`Ef!kK~*Il%BAHAaDloocYxrgCHoz z0L&c0r~2d-6F6Idz9d-%Si*7)F3<%+J{kal5Xw;j@Ptrj9%Zz_0B8vT|GxG)6b%YM z1B9BQzt^>$$_6SU1I@|ji`4&5Boc{4B9TZW8k7DBFaWjb9TtHJeu)48002ovPDHLk FV1n6#bKn2~ diff --git a/helpstack/res/drawable-xhdpi/hs_search_light.png b/helpstack/res/drawable-xhdpi/hs_search_light.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc3e39394246b221f7d4617aa5600a6406aa7c7 GIT binary patch literal 465 zcmV;?0WSWDP)D8CL_;(V?AVEarj0ldk$~bl6y3&Eqek6=6UA+aBGp8+4bCOt0yJyz3VGY| z^>9EE59hXLP{{L0Lqkciz%eblTs;71sDpKM$pE;wf;`qWNA#EmA z3}Zav^tfQ1X+{`jh7B(9+LToU=QvL+>I0VO;G8NRYdGH+S07Zk#aU4-eqf#$*8o)L zVD1%%1x$}ceS&42s$y`AxljOCm_x;&g;`eso0uELpo^JS0JE4E#URIwD1Z{?O)C5yhj~>DnwSj*u!U(V21l4n1#pdNCjP>$mkQ{TM zA}DjpU_DNl!r50btZ+|1chvL?-kyr0${{zr@Wwl@G-*)PA2jglN`V8sx>8^tZ&xX> zhqt2?sN-!b1?qU2QeYP^Qwr?hWJ-f=e#?{&8JUKL{zpFn4bJ?-H56sJ00000NkvXX Hu0mjfDd@)s literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-xhdpi/hs_send.png b/helpstack/res/drawable-xhdpi/hs_send.png new file mode 100644 index 0000000000000000000000000000000000000000..761929f4319ed27f6d1f995d09eb2b9bc2de316a GIT binary patch literal 543 zcmV+)0^t3LP)x*fkZ{B`g7i!8I&_G+^jp3D98-1uOyT{3%&NQbJ*DmH;h=0&4#;NKAvc zngWD8@00GiD>ySpPfw%ED;&ph9LI5-3$`dDOrO9#M^uFcUS_~=>dFFfx_Utk2yf<& zL#na@CMZ#XI2|@AiwWojH6)m^LH(kxEMS9@5fBJ!L`Y6LsAWk36I4l8AWn}K6=i`! z1T`jn!d%jzq%2^A5)_C*{hV}APXs$kL0JK@psavcP*y-Js4$V~aX>{+zy`G>DPV)r z6R<(eC=1x2@(bh(YKnQ**yWUeTr*S;>I<{1u+1@l=<+bZpnjx+Qo5fu8;PKF?k63T z&i%xoY9x@kpL9@4_j5}#5tPvV^kY!@1?E^~hZFvC#pAmKzO$Gop#{FN#~J^*`EWw} zOc(o%)6-_1uf;#(bTk5Ioc`_<{*2Snl!|`F>1b;C&p1moA>Y{Fg$x4uf7pUlG#0UF zEGp6De_Cu(k$v1X(Z~qcw}$)z`QM|BfL1h?v05}nKrI?0pcRc}l>M1JgMf)fQJ_OZ zb=@XLBfE0eiqR+um}v9_;>v*7;;V^9Nx(!SBw#n;^aNrwGW6B<)s28&G*%#PM2m8+ h5{=_Hj^j9v^9)ES=TShce4YRR002ovPDHLkV1nL{>pK7d literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-xhdpi/hs_send_light.png b/helpstack/res/drawable-xhdpi/hs_send_light.png new file mode 100644 index 0000000000000000000000000000000000000000..6aeaa850b0f6687787ee735a7078ecffd3746ae3 GIT binary patch literal 586 zcmV-Q0=4~#P)iiyj@9(xVOVg#(7p003K_Gj#>nXC*>~ z2iWpwKJ$p7Er1B+1Rz;*lb$1h2o)J%M>$)bF?9w|p{xKzs8|5sDMy8xSOSPpT{8g5 znuiPw03r#cM?d%dGk^-^0w6*?WzsCbPb2|^Y6(Duas&{e0sur3N{^b!ng=Cx8fL2p~fB9RWlrPXH0B4&V$IxXN9QdBq2I(S<5~;1uV$%xw;N!HTa93iX6> zJwV&@S#X1H4M2eTh)@*(jm}4e8dU%UnU4rn28cJGPt5680EC#&=C@E00M2uTI~?(n z_k8;+fX7^FN1=;c;~pox=Hovrbf2@TP>>!Mvfw(W^-CP6$7N}>LiM=(yQ3AL#|3FB zA0?`LTp`VfPPtm@aakJIKQ#KdU<05JY(@YojR$~8V*nu1_+Bl}8TelAsx&45de>kA zp!d-R03wa+OFosx13;uP01#X7fJkEiAS(mD zi?1q;4S-5x1E8C59snYZ0l=obUhDy&(ij2gMzj&Y8g;nk>&nCnxMIS@;sApV{x`WMjR6BahjI`6e{ynK+S~O1 zdN{o;)M^w(Q4~c{6h%?gdg}FhT|{#qywuAKN|L0HbdP+B_?S+oUxx<3r5i+!7+3~T z7Qg~&=vPlHgNOuu;1MZavT2TZL%fd1Awt7=7Tm#IT@xL|rl%SF?-M+Hlx!MGP^%jhLV!7FGeABV7m%;hN~}E*lpZVoh=pdqsuAFO@?xY)qk2;0r_)i~6H*BmU zKeL={dR|9?KBQIlx=rIY7#ALjidU|&;&C~s+vKs*_wlac3Q?OMXaO*1ToXWU(YPjn z)S__}0RGn2v}jzb0#d8SwE$#RjcWnOts38D1qAg{v@`%Tz}&KNjS9#t8?OR@iQfn% z0CLO5MF9N2Lt@Lur4^7`H!cOxv2I)nz`c5Uuxy;7D2k#eilQj$p!Flb0N@VYT%`vC QQvd(}07*qoM6N<$g4U+^0RR91 diff --git a/helpstack/res/drawable-xxhdpi/hs_accept.png b/helpstack/res/drawable-xxhdpi/hs_accept.png new file mode 100644 index 0000000000000000000000000000000000000000..5697dba95430eaee4bd539c22e3cb701a210f91e GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q1xWh(YZ)^zFe-SuIEGX(zP-88wUU^BbF_k0M0U(N=>SoP~bGdush|C~V4_~%b!TAmxepTyy>a!9!I zgNu^QM2_>1^Pa2Qc)PILoG<*fcDB0tX_xo=A8RVydZMWi^-NQt>MoGDg@(Zrx6uUQ zik@mJd~%VqS$S}>6e=<6$YM_$6yj&J9Fk8}UP^O|X7#!x3Kjr^jKR~@&t;ucLK6T# Cu8e*F literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-xxhdpi/hs_accept_light.png b/helpstack/res/drawable-xxhdpi/hs_accept_light.png new file mode 100644 index 0000000000000000000000000000000000000000..bfd7b82aaa13a7789d0e2de69a9d42dbc4742a67 GIT binary patch literal 386 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q1xWh(YZ)^zFnW5rIEGZ*dVBq%FSDV5>%}Q; zF2S4}H|$TDd2vZpm**~-Yq`B?`RDI>=AM&O5Gd%|E$QZt^z5~{GD`E>Rvd3$aT*N; zOLOqc*;IUZuv6kZgmJK$9l@9vVsjrT2@;$4f9Aj2?<$n$rI*_Xo)20iV{^LW(+3^J zQ%8;GYRI48%s#IpUFzc0%6q#n%ePj>ecry+zuL2m&h5)FJEp}G0XUN2K_Q242j*Cv&FuPo>v~sC%QnFDLoHv2P p-=jrc<&dz@!-+`2ap}rGh6f+*rTN0;Q-ER1;OXk;vd$@?2>?Pppu7M8 literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-xxhdpi/hs_action_accept_img.png b/helpstack/res/drawable-xxhdpi/hs_action_accept_img.png deleted file mode 100644 index 6fda89ec7d8d2ef1caa50a1191c1b2f9a0e65e2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 649 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGok|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n6y1z978H@y_vn&?@)k*!|Ik+M|N2r&hGUM-TIHt7{92t zFt#xG%y-U5#fNXrtdgR_gu;*6Ol=dkEd74(-v0M@Q3OilarG)?VsosHc6X{kFE8|r_utCc zb^hr(TDA9H+1%eud(S;t@AFLE!QrP&)2yfd=O*mmGSR;w?dN&j*=t???S5Na$gyg= zeb&VN1s`izI5g%nG(Htp*igg7GHtz`L&ncl%tsXBa~mR_tmYAzTvN)JG(^Jy*f2`2a7taYt1E~`Fiv++F%=bn3Gp8Vp#eT5CeKiL;`Oqf)& zn8EbZ;*JTk{%}p+uaf_5ao?*sCnY~sSFxVB_gA_4XZxMn35IKKo_VdU82aa~Rq{bZG@b+P#Mt@iqco6CE4p82`js^K+H4XA>%&#t@~3O;?3l3o zPaN|Nw+jmUzcVZo+;U?5hi}uL?37nb)!BODyVL^bme|veZ=U#G#9?G1!wVFWTj0zh z`l*@4pl8C;KM9OhZYRR(E-<9KortRYz@RI*X}Y{?!z>Q1C+@-zR1Qt;*~#`3B_4sC cpP$qZFdVVp7yd2n{x6WEr>mdKI;Vst0Qu`3kN^Mx diff --git a/helpstack/res/drawable-xxhdpi/hs_action_accept_light_img.png b/helpstack/res/drawable-xxhdpi/hs_action_accept_light_img.png deleted file mode 100644 index 68c41deccb550fc809319aa8efb46f392c6281c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 619 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGok|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n0P&1978H@y_s{+_ppJ8!{n}P_Jl^g15&Add<^BctYsTm z4>5e_GDLs#>D%YM3-mt2b-{ zQReav(feL9Xr3^aRuKKE#=J!3eoVuaC$qUGEUGbP44Rs+eFZc*?GRW@Ar0{5NQ)mVA*nb!T+$r)Oc&qeP0Zskz@Y3FJFO#+uE1vLFh(0+Ks$ZMkfmrxfS zP1Te9QVMNzE_s!9pjCjHI8;qcJzn3vHZ_l!SQ3-SwA=Ftc~CDzuKzYpZh%^ z^;pvS#m=#u;d_4ln7V&*@>UiOiG?LUyV*Zrda4p1AWHC^m8a)MB(z5>b!WJ^Un6l^l sf0mUm#gi8ZJe2&25@A5j&d6;UfcyHp9)~Tn$V&m|_kDIZU$FWVk>5 zjwe^b`;WEGj0+oc56gVX}RLqm?O?OH<^xNzH{Fh&WwqgSd zUaKt3+j2AKSkcaDOV?#S*(JKkD{{4p=c>t43Wu~Wrf+H!-_?12)3hX)+7M=!9}{E5 z#5df|4S00Flk;dG&xME20R+ zG?IfOvM0PdQJudjFSod9HKYHoQ=Id9tg?>njaerZcgnThW(DJ?wBVg*csXB8&wkT= zhh^!>-m_^XCmD?opVtrjv)|gn^IhqUn`sFalK(%RU3g7iqVLw`)yG)#nbYt=kY5&aA4lTxzsGNb&9&dgT?EvUp?Pzw#e<8@{$NcE%(bl>Js%sb+01r# z!fsE~gvHtd%QkJ?@U1sPlhg3W{_6Xd20mRH75iIMgwi%DC?UXit9JV&iMHJP-=AML z*~@ex;g3b`qaA!L=B6#@QvS?;B4D-nqpG0Q=8sPWtPXyB|EQ$;K&+}jSd)K4tc*PS zy>jUU>3NLmI&v4^e>_pwIorH&&Psb>m3Zbk0x9=dcPe<)^A$Ku_^-02FX7{Ug;W-9 zhEx`5hENu523Hnq22&Pq233}522qx523D5phBq9l3`WXR7*BKsa49G|SvKTws4^NU zPGLRK6d~`-ue4=`Wms49QB{4xEXo{88Uhp93C@d{7K?* zcwFwpU{WW&E9Ln5^Cqt??jA4vIR7#8g^E9)7}g%w=be!FXA?u@F@4SnnSY8HZXVNT zolyA4h#~U0KI4SS8lXEKM>A{mqu*5hbKjlO*51y=i58$SK`#PI5| zH?u{LKKBEoeJTx?e-wAcd*9sAW52xO?2hOA-s?Yp7FAp0*^u9|+?GS=@oA@0x`kU6-~_111CpPgg&ebxsLQ0NP68JOBUy diff --git a/helpstack/res/drawable-xxhdpi/hs_action_forward_light_img.png b/helpstack/res/drawable-xxhdpi/hs_action_forward_light_img.png deleted file mode 100644 index ae8ffaf1dd027403716455e5c024ae3fc585a2a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGok|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+7<)Zk978H@y}5JI^KgL3@rNq!*F9ufm$|35b$Rb2D( z@cr`s{dIpft$S_VV0gISIf9$do-2`C=HF$}!}e8v7HT<-{~3;N{`LCQ{kd|AUsYe! z-QWB6_T8!VMsH6CesbKw;`A#s!^X+PfwiTgp`=BK;Uq^YLy({sql(fLW)Ei#&Iv66 zVhXGaO&pkQ~Jw)?^d+$Vv^O(KWib0%aidib4XgU#I!)l5ISCIQ(WOhbX<55ibMYTjn?>{oYK z`cPg~&)YIovQFiI-G%G5-vbkWykvj)`O&ep!AdT7ckMV7TJYuUZf!-0eXu~BwJD#G ajUi@-{dBjFTYZ4B$KdJe=d#Wzp$PzQ#?k!% diff --git a/helpstack/res/drawable-xxhdpi/hs_action_new_attachment_light_img.png b/helpstack/res/drawable-xxhdpi/hs_action_new_attachment_light_img.png deleted file mode 100644 index ce7536cbdd755307df1806507498110477cd3d0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1048 zcmV+z1n2vSP)6BFc`(DAXg1w58wqn zK;66JyU}|*fP8N}Kzp|bsP9b%=m6CM8Xy`#1GxMgs$~gUrYK63$oBxkfI<=B?}_~Q zPht#$AP9mW2!bF8f*@!xC81U5a=9${&x$AdO~vJcr<_ufBoz$k4}8YcvLPG6KT{fu z5lJBMpZL$$7PpiJt97%)71SqE;yD-7rdK0W2{A`UDXirI4$e!&2D@TqVAE5pdNxKneo}fG?>)3-AY@G{0j=+y?XvU-!gUFu)Q% z<>%=KPpM(~G$ETQmvb0k318&DPO|QqAoA;G#Bb3X&;fp}MiUy!r5ms=^79_e6I!ozDEN9-=hJ5@6iCj_c#n46MWj5 zfm zM-u_xqXB^L(Ez~rXaL}QGyw2D8UXkn4QQzFEtqr=>L=j4n}}ta3YQIQD_g*KWB{-9 zlIc&DHEnP&Ow5W2ewP-oy;0#d>+MzS@U09GD~BuPa&EAmQmQRNw4`X^lO8SZS!u4B z9P6XAmuux3Ed`(I?#m~9QLbEOImBtX#Nr>NbCv4Z%Fia78vI^@Gc)a?hJ5mAhfIlU zCtluZj4?nBzD0{2rHq*!0}r~}aWxE;VVO0z+ixjG3E!0g?fSeAup4UP8Y3u{Y+`|L z8-!J*7A91}fRh+irMiF@I(*v}kZXpMX@?e3#R}infWmNSYOPq{yJ`W9>0kK){5}j2 z{kJ;nopEqmz#ncDr2E#wvj7PAeH$P?^`(2&|7c@EtnjwvAm0gKEJbS3NfM_978H@y_s_{_mF{z>*J2|X$)2l5(?ZU4Q0H~5_-!R ze)<2t|82iy1J4CkiH2KiCu+GkvsBh?tnEutG(Bi)**oeh2MYw9o*KX z(iX_|r858aF|PZD}_q36y=(<-Q~C0-n{gswc)i&P2A0+ z*?dYWtZUvn+d74Nc5ATy&U1hD{KLtr)Z4mDZI?N73sqE|HnHsdv{~%W{mB}>Zks*} ziamPb>cL&Ge39>hjV_vtMBeS^wV0-Hog@MS3u9;kl3*HN*epB-45SJ`W zH?b64$fEPVMrobWL_wF9i*ifN-- z&hmu|cW{1?3N11|5O2Oh!%^puR`&;;3kmNmcteE>k~XURIAFX$ts<6@_nLuZZvi^P3!Tg={(; zap4ZWA9gWGHT74srF>Mi6=V#*Q#kGJ^^kPo%J1pFFS7;#<*tivP^eI4{3rBe&V#RM rPz~3`9X>>T*gO>}jzP@*HQWXaQ&*{-jPLjA2MKt(`njxgN@xNAUSAOp diff --git a/helpstack/res/drawable-xxhdpi/hs_add_attachment_img.png b/helpstack/res/drawable-xxhdpi/hs_add_attachment_img.png index b66ffc289124d1ac1b014b93bf938f5417453ac8..a1d0e2462cab57901ef6df993dc6fb2d70ed542e 100644 GIT binary patch literal 1226 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q1xWh(YZ)^zuuSxHaSW+oe0%r4e{`wD@sH)F zGY;!d_qds|LDlNnv;Gx|Im#bT#b(UVvl5HkR)4@kOyOV0$xWTJRuucOahz`IoPOl3 zQ?sGkAI2jZ7GM3Q2qY>ow;7&0yOl@&edRvwx0$=Y%=x^>Zo9gAd-=A@m*cjioRmoJ zG2AM%bbjEn2sPKP)MXM&`<3swpHO{~!sNNR&}xO+lvgjGt4%tXcj2^{ljGHWEplG-O!b16zJP=E z*Fftxv#Tp^1c2Bo~`)0#OnI`ANMx>TAcMEYqHgKp?%Bq z*BI{Uvd;UlPd)2su^IOiYwnaroe8X)92SNB*c_<<u@Elvcz}Z zeZj4NA99E!a|Z5q<@cQu=q9{ZMR2RDS&Op3p4N&Ro*do_dSlL7otF=3RTtQjD!W4T zkO&9crc;;M6S+eUE$#VS<7QIRxS-`A&;PG3iVTf5wbQeu!>{i&-Ol#kVsenz+8*wCh2- z#uBmP{GMW_f2$>AMS`aPHn-`zZe9Mf>FZ)AbJw>WyB<_>sXzMhVQufCZK8qMivqqW zWknyz-`{<~f8h)Evz}e|ChU5VJtde!v~T&k&mw!53vTt}dKl`GEAOg*YR;}VmRcva zdp(ntzvK3ykzZiz|W_q;M6kAmbf95U}N%K_&zN~||{c5`&Bt(pJb=6;}i!x707+4G8zaLjqWbJFtvQRf8%rq-PB z@+%CQvuuvT?Q;U2{)KskjlVfttL~ltG&Q%ae5G>8qBoCiCcj?xbEe}wC8vz5g){Qn wW+u#1oum?(G^?=f<+5H~P`RL%{hxW$-Zh`T*RTEqETb4aUHx3vIVCg!0ND69wg3PC literal 1231 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 diff --git a/helpstack/res/drawable-xxhdpi/hs_attachment_light.png b/helpstack/res/drawable-xxhdpi/hs_attachment_light.png new file mode 100644 index 0000000000000000000000000000000000000000..bc58d0ae045d3034019747ef08e90ed68ee8bf65 GIT binary patch literal 1162 zcmV;51aX2^c1Ohjh0&=T_({qPTv#1c_7WYN9lwuEjZuu`O&Np4OZg+igF z;mRWKjBWzKNS9X@LZo@x&IV4M)9vg$L%REX&*bwxJ3qch-;al6j4{R-V~jDz7-Nhv z#u#IaF~%5Uj4{R-V~jDzm;xZi0$!(s@987ST{4tbhTHtb&vf$!b5%+tc!i@}C(17H z4hWHhPh%=KH*~SlyGno;dQNFO8VJ0`o zepV1u1ku2I43k|SapeO|^fQ@jv{I!=V>Tzr?p;kCHC!UQG4@ccGC+*Cm>}p5b2L?a zL3Wo}qB6oJCJ5@*)Ub){PBC3&hBpZsrCzzCo)p;}q(Wtf7$*tZuH12$Yz`4qSzIcb;sb)_C^vjf&}F78BoeHnn{%WXqhREP2F7uP9U0@oNz6biNM zVu&J;Cw|1$rChL=pgjtOEu<(Cd7=&1PYRDXgSf6yEpJrPLlMant8iUWc&sI;RoUOrF?93CI(xa9vSYbl^HJPb3&3Xp~P_#x#{2?YPb=EKcKUl_%B_^f!wX z5uCx*sj%q7wOXF&#x=?!MFcZR<7!b@Byly%6X$U4Rb;T6phktoD6TqrB86+2B7#P4 z;X1GI$l!|06JxlhDH4d$OHjMQBZDh0PmJN3rbwWTpgYtlJVtTV$rCAD%M}5@E;jZul72SMo%HL4xk_DJ!W`QIKF3t7zv8X(n@$OQz*<}CxevMdD^L0 z{&9?;KbWqNh_jYXeqn%n6i1qyT;VL8w9u$R;c3zYeM^PR|2RN4J;Y@0qn3WM>7hdA zJ~oiucRV3;A4kaUPnOC^RB@5)#_6C&hIu5JOp@(X>ruy2ZZNqa4)8pW=~2cD+~C0m zIKkVjVF3*!^ypzJNg_<8$2=|)S&9OxI7&n*D%e0j5v1s#mM+pnjG~37IK~7KqUfQC z4hDz_MH7$nGM{mkl2eosqlqniNH4!}jS#Ar*{o@0{*sGGK5%_%=tg zr@!%#VgcVr-p-6;vU`~R9Crh%gMfyfjVC@!On%Y)+PdGxwBJQ|d$?FGi9?4gmq$be>Z{&mIM*MElyl^ wnWy&2B(u`vv~!f)rB4EtcUYKUu42%!VeC6+?3x#3a}Olu>FVdQ&MBb@01qQxDF6Tf literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-xxhdpi/hs_disclosure_img.png b/helpstack/res/drawable-xxhdpi/hs_disclosure_img.png deleted file mode 100644 index a48652157ad70c960186eac358906e9c06352d65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 786 zcmV+t1MU2YP)9g6Q}A*LuC)wB2s^ zP-7pNOeP09oz88E|9#e``Vv-AW*?~4YDXphgFWK^Y%*ZC*=#POP)6$Y`bmlZ{CDy9 znDAOAoIt5OlkItl|MpMf|7w~So)txL2*uJHa7FFQ-wd!Oqc-#}i>Q{~gf))=GZWTP zERPAL(|~WSR_iK?<%yu19usWHQoD$18KS6!-Ew{jAGA=rfNF^u4u_{C@Q!m%*pXqU zQ7tjnv#p0ahoh}Vqj3b)5;Gc&E>(!9n>L4_T4F5iSn6?p2_e zrxNzQ^DFpjD{E9szeqc*_S9*@M@`}@sFoPp4VAcWoF=>*kH<@>mfnPAiTmDZ!pov4 zj-gum;b>J8?q`n)8j2pVg`H=i*7L?w{q8RDG*3Le>5ZrQYObSLdKRsBdreU5B3WW= zd{^&&?3|Q8QDKn*#m(aq_Lb9wUCkfoP%SZo!QhN#f2RplSY%2@E4B)Dn()L{*Qk~l zO|(th4{}b-_lT!?7HVr1)(BKs#V;xaQ*gHH|6DNMbgH3VbU*^fO*nJ)z z?VE?_DI;D`$q*btdAM~Bq9{)n&jCE%Js*=Z&({M000000000000Kk944+$nZUjpAP QWdHyG07*qoM6N<$g0DMd4gdfE diff --git a/helpstack/res/drawable-xxhdpi/hs_disclosure_light.png b/helpstack/res/drawable-xxhdpi/hs_disclosure_light.png new file mode 100644 index 0000000000000000000000000000000000000000..e383558772954850fcd88fce1bd416c7c8c80773 GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q1xWh(YZ(Kn8=fwXAr-gYUUK9*k^Q3hJomNEB9#KQ zA8fL;dHWyjd<0_1*;E{RxDzY} zX1=WW@Bpl!u;N@rpR9@Xc|O5;9xduZ4?A5dl%ULsC=T=#{>~(rx1O=Zud)j0M+Q$< KKbLh*2~7a~e_)#c literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-xxhdpi/hs_download.png b/helpstack/res/drawable-xxhdpi/hs_download.png new file mode 100644 index 0000000000000000000000000000000000000000..7024677f63ba5654061138cb6c887d6cbd8cd16e GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^6F``W8A#63;L-+CoB=)|u0R?Bnv-810J4}%g8YIR z{x`I|+SLQ(uJ&|s45?szdv0SUOCS%!Mc0Bxu0Z?gHIFYW-NE_w^^uEqmZmx{jtZaI zdX0I{x%J<_F7GwFm9e<@6VJZ9z&QuMmtJOQry9=^}c(P=<~# tlyP_xISf79`&DxfRxf6E`Jb`&EA#8N7|*_%oGT#zc)I$ztaD0e0syc5W^Dif literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-xxhdpi/hs_download_light.png b/helpstack/res/drawable-xxhdpi/hs_download_light.png new file mode 100644 index 0000000000000000000000000000000000000000..6602791545ff97a485042c4609a729757922b6c3 GIT binary patch literal 304 zcmeAS@N?(olHy`uVBq!ia0vp^6F``W8A#63;L-+CJOMr-u0Z-f3|JhnUIFB@lmz(& zGyG?0c(D0mIFNtd)5S5Qg7NL8g}Kd%Jgyff^!->F`o2}}_}t%%${nijyLSKM`^zAAsKnfb Sjb}E{YYd*QelF{r5}E)O=6ezV literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-xxhdpi/hs_forward.png b/helpstack/res/drawable-xxhdpi/hs_forward.png new file mode 100644 index 0000000000000000000000000000000000000000..5c5eda0c3f1641f107509a1c7fb9c3c749446a5e GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q1xWh(YZ(Knx1KJJAr*{oFP!B)WFW$Ju!ODk zYrvF=^WD~e3x_m~4zY99}!XLOk z>@SCxaOtcSmtE$ny(-mSz}mm~UsPoe_q>&JD}X?)^vT1A4`*I!YzKnpp&vhd_~7$O z?vZ3@M|z0jyuj89H&YwMs~=Q4Peo)Vo>K)mFVdQ&MBb@ E048>ifB*mh literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-xxhdpi/hs_launcher.png b/helpstack/res/drawable-xxhdpi/hs_launcher.png index 85a6081587e2c2b9793d796ee7b07e12fdf860db..324e72cdd7480cb983fa1bcc7ce686e51ef87fe7 100644 GIT binary patch literal 7718 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 literal 24777 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 diff --git a/helpstack/res/drawable-xxhdpi/hs_search.png b/helpstack/res/drawable-xxhdpi/hs_search.png new file mode 100644 index 0000000000000000000000000000000000000000..3ae490ef9be0c727cdea0ff907723362d0ccf021 GIT binary patch literal 684 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 KMNUMnLSTZewp6SD literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-xxhdpi/hs_send.png b/helpstack/res/drawable-xxhdpi/hs_send.png new file mode 100644 index 0000000000000000000000000000000000000000..f2d6ba95c3398d7c22a52128ffee7c0d0ebf663c GIT binary patch literal 714 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q1xWh(YZ)^zFirGyaSW+od^>kIPJ6WV2Eq*BU;>dNL=?-s=^%}M2-iTpZ>)|Mx622)dXY0|;`S)ffKV9?u z=lz4m|J7&CEk5^q8KVmvgcaEuJEj;n=R8U5YYDh8|7E&my0S)wMfT3Lg2grG6H?j^ zo^=hlV6fvl8+#KEAIrgOOzfEDsH7=`ZpLfnYUO9PdO}5L0&2w_flhlh0w|_Qy z|7qpNBk!Ipuy(3nqMy3o`cU9b>~{$jaDU3^UGt}<$wG^Ds{fOK0P#hi7I<2S zdVthgX!UzPTOo2JP;*7izGY3nN)nb_cjH++i~GS*Wr3+p3R?R1i@?$xd8Y#eVhU7d tyM+pb?ECELC=;5p^qrKBARPSU?fc|m_TgE(H871bc)I$ztaD0e0s!gcLqz}p literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-xxhdpi/hs_send_light.png b/helpstack/res/drawable-xxhdpi/hs_send_light.png new file mode 100644 index 0000000000000000000000000000000000000000..14b90dd3764ec6f4c93b75e409bb8987380f0112 GIT binary patch literal 806 zcmV+>1KIqEP)97a=+)GGgoibr515hag6BT(rQ$s^Dr1(nM`!BU(m#V32n zaegQJTf00dGHbq-%$eOV#u#IaF~%5Uj4{TTe}~sxrbQ$7qaS?%=G^6=1t~!VOGccq zAT6k1#--KZEa)q%6v1^YNDC^0doF^rAQ7Ae3Fh3Ple3_2tRRCMSdc&jXF)o+yaatm z@E5^ZkP6O%bZ`eOXkBp67;LkkT{gj#i?l2#F*pm-EJScM7PLT9MsOA+g0mnI+;I!q zis1C4CI5qu+!n!EkOy;~LA4fRNH6HMiw=8oFF7<`{0D?m8O9U4{Q0RTVXUI+f zL814xTLiZ~f(~Ju~#xvtpv6vLJm|@w>e{wgC`^0U)>+yRa-Zj6)p?>X)q4r)+T2 zcd-qq|8oH9sC?q=r~q|TfI2Eb@r}hW%OEP_P^WRIji`)d=Kpy>85N)&DF75vSxpg9 z0qRLqKoOM%OTB&qP(%f2zL5jaol#jd*;|1CbyR>lD(jLvDnJ<(px&3A0g7uGfa1Urpm!D(puYJ8XmwP8))i;40C@rA0RjXF5FkK+ k0C|7_0RjXF5FkL_2YayDe7#r6G5`Po07*qoM6N<$f;n$jyZ`_I literal 0 HcmV?d00001 diff --git a/helpstack/res/drawable-xxhdpi/hs_send_now_img.png b/helpstack/res/drawable-xxhdpi/hs_send_now_img.png deleted file mode 100644 index 373dde239e0ebd7e9935ae186473c955cfce9081..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 759 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGok|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m}YvqIEGZ*dNaq?U)oW?;e25S3#;B6rZv0U9<5uzaMG)h zTWXex$jVRYL7(M+$gXteoT{3U+4-bPtjpw#S9i+Xj<+|=H*c?g@40%a{g!KIZ|{tJ zKX+~_&~{{yZ8X#8+>*C~onK#=+dinU`KNfd{N;X+-^TOL{})P&W>kLJw{+^IbApNb z2TFtg7qAO{V~Sh)JFHqt@c)A4Asy?NNb6Oe?%pDuxj%jLO>W5xHDWt%)@^vAo6@qW zp;7KA)BbQ!I=TP=S33$|aH=W;~bG-0<@!QQ6=<(KL_dn?qK%}zH3zhsN%3G~=q za9=y<9EUICIu3bLgOE!~CaiC~%WplH;MsLSuT;rA`5j7#LoDcRpS%bc|q*KHc>q$+1tB2yl!po$Vlydky(F0 z%6f5_&99`tH)isDh}@8seuc}Nb6M_b4sOQwwpI%(K{2Kn^Ru_ywOt}Oe!LJ;Ra(=v zLH~&T-&HDXKHa7FA36UKHEN$7`%daZLyy6k2GN^_YjlHGM;VC4pI-WQ=@h}eIzfNl z_E-8|%XnD0)8)xBr8}`Q-+kqdFV~UPF-kT+8XOR4ZQ$p~<+v}#LiLT?CMBat-dZ!O z8N$;RHnRLkI@!ZNgVC~)UweVlhZKj`O!=A%6h1Vv)NDBG@SxXN;mMo*pQG9RbK@A7 zXeg|b-nxZ#3X5GWW8nQ+E7T6;ZxZ~`AUQ$!#|9=YCiyT2&j*jsHTeDU@ONzxdElGA ze|Peuh1`wT&ov}9A1ME{o_h<+6qbE=B@fIm&EWhnU7?-DE{5$1i`|-rt^@6&0YX4y n^6o~>JHU*bS{NLzR|+RE7;d!x!1aHrF-XeO)z4*}Q$iB}O!YxH diff --git a/helpstack/res/layout/hs_fragment_issue_detail.xml b/helpstack/res/layout/hs_fragment_issue_detail.xml index 8ff107f..36d0513 100644 --- a/helpstack/res/layout/hs_fragment_issue_detail.xml +++ b/helpstack/res/layout/hs_fragment_issue_detail.xml @@ -51,7 +51,7 @@ android:layout_alignParentRight="true" android:background="@color/hs_transparent_color" android:contentDescription="@string/hs_sendbutton_title" - android:src="@drawable/hs_send_now_img" + android:src="@drawable/hs_send" /> diff --git a/helpstack/res/values/hs_default_theme.xml b/helpstack/res/values/hs_default_theme.xml index 8000efb..e5ce62a 100644 --- a/helpstack/res/values/hs_default_theme.xml +++ b/helpstack/res/values/hs_default_theme.xml @@ -60,20 +60,20 @@ - @drawable/hs_attachment_img + @drawable/hs_attachment - @drawable/hs_search_img + @drawable/hs_search - @drawable/hs_disclosure_img + @drawable/hs_disclosure @drawable/hs_add_attachment_img - @drawable/hs_action_accept_img + @drawable/hs_accept - @drawable/hs_action_forward_img + @drawable/hs_forward diff --git a/helpstack/src/com/tenmiles/helpstack/fragments/IssueDetailFragment.java b/helpstack/src/com/tenmiles/helpstack/fragments/IssueDetailFragment.java index b6cbca7..e7b9ab2 100644 --- a/helpstack/src/com/tenmiles/helpstack/fragments/IssueDetailFragment.java +++ b/helpstack/src/com/tenmiles/helpstack/fragments/IssueDetailFragment.java @@ -259,7 +259,7 @@ public void onClick(View v) { else { AlertDialog.Builder alertBuilder = new AlertDialog.Builder(getActivity()); alertBuilder.setTitle(getResources().getString(R.string.hs_attachment)); - alertBuilder.setIcon(R.drawable.hs_attachment_img); + alertBuilder.setIcon(R.drawable.hs_attachment); String[] attachmentOptions = {getResources().getString(R.string.hs_change), getResources().getString(R.string.hs_remove)}; alertBuilder.setItems(attachmentOptions, new DialogInterface.OnClickListener() { diff --git a/helpstack/src/com/tenmiles/helpstack/fragments/NewIssueFragment.java b/helpstack/src/com/tenmiles/helpstack/fragments/NewIssueFragment.java index 179c87e..a6685bb 100644 --- a/helpstack/src/com/tenmiles/helpstack/fragments/NewIssueFragment.java +++ b/helpstack/src/com/tenmiles/helpstack/fragments/NewIssueFragment.java @@ -297,7 +297,7 @@ public void onClick(View v) { else { AlertDialog.Builder alertBuilder = new AlertDialog.Builder(getActivity()); alertBuilder.setTitle(getResources().getString(R.string.hs_attachment)); - alertBuilder.setIcon(R.drawable.hs_attachment_img); + alertBuilder.setIcon(R.drawable.hs_attachment); String[] attachmentOptions = {getResources().getString(R.string.hs_change), getResources().getString(R.string.hs_remove)}; alertBuilder.setItems(attachmentOptions, new DialogInterface.OnClickListener() { diff --git a/helpstack/src/com/tenmiles/helpstack/service/AttachmentDownloadReceiver.java b/helpstack/src/com/tenmiles/helpstack/service/AttachmentDownloadReceiver.java index 7287076..1877928 100644 --- a/helpstack/src/com/tenmiles/helpstack/service/AttachmentDownloadReceiver.java +++ b/helpstack/src/com/tenmiles/helpstack/service/AttachmentDownloadReceiver.java @@ -92,7 +92,7 @@ private void downloadCompleted(Context context, Intent intent) { notificationBuilder.setAutoCancel(true); notificationBuilder.setContentText(text.toString()); notificationBuilder.setContentTitle(filename); - notificationBuilder.setSmallIcon(R.drawable.hs_notification_download_light_img); + notificationBuilder.setSmallIcon(R.drawable.hs_download_light); notificationBuilder.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE); notificationBuilder.setContentIntent(getPendingIntent(context)); From ea1c5468ae67694086e471a75e0b7466ab08ecfe Mon Sep 17 00:00:00 2001 From: Anirudh S Date: Thu, 3 Sep 2015 16:56:34 +0530 Subject: [PATCH 04/12] Sorted out issues in the home screen --- HelpStackExample/build.gradle | 6 +- .../helpstackexample/HSApplication.java | 20 ++++--- helpstack/build.gradle | 6 +- .../hs_expandable_child_home_default.xml | 1 - .../hs_expandable_footer_progress_bar.xml | 15 +++++ .../hs_expandable_parent_home_default.xml | 6 ++ helpstack/res/values/hs_default_theme.xml | 2 +- helpstack/res/values/hs_dimens.xml | 4 +- .../activities/HSActivityParent.java | 3 +- .../helpstack/fragments/ArticleFragment.java | 2 +- .../helpstack/fragments/HomeFragment.java | 57 ++++++++++++------- .../tenmiles/helpstack/gears/HSDeskGear.java | 2 +- .../helpstack/gears/HSHappyfoxGear.java | 2 +- .../helpstack/gears/HSZendeskGear.java | 2 +- 14 files changed, 81 insertions(+), 47 deletions(-) create mode 100644 helpstack/res/layout/hs_expandable_footer_progress_bar.xml diff --git a/HelpStackExample/build.gradle b/HelpStackExample/build.gradle index e86c637..3bf85e2 100644 --- a/HelpStackExample/build.gradle +++ b/HelpStackExample/build.gradle @@ -4,12 +4,12 @@ dependencies { compile fileTree(dir: 'libs', include: '*.jar') compile project(':helpstack') - compile 'com.android.support:appcompat-v7:22.2.1' + compile 'com.android.support:appcompat-v7:23.0.0' } android { - compileSdkVersion 22 - buildToolsVersion "22.0.1" + compileSdkVersion 23 + buildToolsVersion "23.0.0" sourceSets { main { diff --git a/HelpStackExample/src/com/example/helpstackexample/HSApplication.java b/HelpStackExample/src/com/example/helpstackexample/HSApplication.java index 2899f82..de14250 100644 --- a/HelpStackExample/src/com/example/helpstackexample/HSApplication.java +++ b/HelpStackExample/src/com/example/helpstackexample/HSApplication.java @@ -4,6 +4,7 @@ import com.tenmiles.helpstack.HSHelpStack; import com.tenmiles.helpstack.gears.HSEmailGear; +import com.tenmiles.helpstack.gears.HSHappyfoxGear; public class HSApplication extends Application { @@ -15,16 +16,17 @@ public void onCreate() { helpStack = HSHelpStack.getInstance(this); - HSEmailGear emailGear = new HSEmailGear("foo@bar.com", R.xml.articles); - helpStack.setGear(emailGear); +// HSEmailGear emailGear = new HSEmailGear("foo@bar.com", R.xml.articles); +// helpStack.setGear(emailGear); /* Uncomment the following to use the HappyFox gear with appropriate support email address */ - // HSHappyfoxGear happyfoxGear = new HSHappyfoxGear( - // "https://example.happyfox.com", - // "", - // "", - // "", - // ""); - // helpStack.setGear(happyfoxGear); + + HSHappyfoxGear happyfoxGear = new HSHappyfoxGear( + "http://acmewidgetsco.happyfox.com", + "b3416a6ebf4245bf9bbeb55b296ecf92", + "6b562e17b1ab4c37bc8c955af8f5cc5c", + "107", + "1"); + helpStack.setGear(happyfoxGear); } } diff --git a/helpstack/build.gradle b/helpstack/build.gradle index e66763f..715add5 100644 --- a/helpstack/build.gradle +++ b/helpstack/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'maven' dependencies { compile fileTree(dir: 'libs', include: '*.jar') - compile 'com.android.support:appcompat-v7:22.2.1' + compile 'com.android.support:appcompat-v7:23.0.0' compile 'com.google.code.gson:gson:2.3' @@ -13,8 +13,8 @@ dependencies { } android { - compileSdkVersion 22 - buildToolsVersion "22.0.1" + compileSdkVersion 23 + buildToolsVersion "23.0.0" sourceSets { main { diff --git a/helpstack/res/layout/hs_expandable_child_home_default.xml b/helpstack/res/layout/hs_expandable_child_home_default.xml index 00e23f3..2ef5510 100644 --- a/helpstack/res/layout/hs_expandable_child_home_default.xml +++ b/helpstack/res/layout/hs_expandable_child_home_default.xml @@ -1,6 +1,5 @@ diff --git a/helpstack/res/layout/hs_expandable_footer_progress_bar.xml b/helpstack/res/layout/hs_expandable_footer_progress_bar.xml new file mode 100644 index 0000000..ed3c0e4 --- /dev/null +++ b/helpstack/res/layout/hs_expandable_footer_progress_bar.xml @@ -0,0 +1,15 @@ + + + + + + diff --git a/helpstack/res/layout/hs_expandable_parent_home_default.xml b/helpstack/res/layout/hs_expandable_parent_home_default.xml index 6f75aea..259279c 100644 --- a/helpstack/res/layout/hs_expandable_parent_home_default.xml +++ b/helpstack/res/layout/hs_expandable_parent_home_default.xml @@ -5,6 +5,12 @@ style="@style/hs_listView_headerBackgroundStyle" android:orientation="vertical" > + + @drawable/hs_attachment - @drawable/hs_search + @drawable/hs_search_light @drawable/hs_disclosure diff --git a/helpstack/res/values/hs_dimens.xml b/helpstack/res/values/hs_dimens.xml index 7f10afa..3a13907 100644 --- a/helpstack/res/values/hs_dimens.xml +++ b/helpstack/res/values/hs_dimens.xml @@ -7,11 +7,11 @@ 20sp 0.5dip 18sp - 18sp + 16sp 18sp 13sp 32dp - 20sp + 18sp 100dp 4dp diff --git a/helpstack/src/com/tenmiles/helpstack/activities/HSActivityParent.java b/helpstack/src/com/tenmiles/helpstack/activities/HSActivityParent.java index 7ed26af..1bfece9 100644 --- a/helpstack/src/com/tenmiles/helpstack/activities/HSActivityParent.java +++ b/helpstack/src/com/tenmiles/helpstack/activities/HSActivityParent.java @@ -40,10 +40,9 @@ public class HSActivityParent extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); + // Handling actionbar title when activity changes so activity does not have to handle it. if (savedInstanceState != null) { - getHelpStackActionBar().setTitle(savedInstanceState.getString(ACTION_BAR_TITLE)); } getSupportActionBar().setHomeButtonEnabled(true); diff --git a/helpstack/src/com/tenmiles/helpstack/fragments/ArticleFragment.java b/helpstack/src/com/tenmiles/helpstack/fragments/ArticleFragment.java index b829648..feba2a5 100644 --- a/helpstack/src/com/tenmiles/helpstack/fragments/ArticleFragment.java +++ b/helpstack/src/com/tenmiles/helpstack/fragments/ArticleFragment.java @@ -35,7 +35,7 @@ public class ArticleFragment extends HSFragmentParent { public static final String HTML_WRAPPER_WITH_TITLE = - "" + + "" + "

%s

%s"; public HSKBItem kbItem; diff --git a/helpstack/src/com/tenmiles/helpstack/fragments/HomeFragment.java b/helpstack/src/com/tenmiles/helpstack/fragments/HomeFragment.java index f79041b..327192b 100644 --- a/helpstack/src/com/tenmiles/helpstack/fragments/HomeFragment.java +++ b/helpstack/src/com/tenmiles/helpstack/fragments/HomeFragment.java @@ -34,6 +34,7 @@ import android.view.ViewGroup; import android.widget.ExpandableListView; import android.widget.ExpandableListView.OnChildClickListener; +import android.widget.ProgressBar; import android.widget.TextView; import com.android.volley.Response.ErrorListener; @@ -74,8 +75,10 @@ public class HomeFragment extends HSFragmentParent { // To show loading until both the kb and tickets are not fetched. private int numberOfServerCallWaiting = 0; + private ProgressBar progressBar; + private int faq_position = 0; - public HomeFragment() { + public HomeFragment() { } @Override @@ -87,6 +90,10 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa mExpandableListView = (ExpandableListView) rootView.findViewById(R.id.expandableList); mAdapter = new LocalAdapter(getActivity()); + View progress_bar_view = inflater.inflate(R.layout.hs_expandable_footer_progress_bar, null); + progressBar = (ProgressBar) progress_bar_view.findViewById(R.id.progressBar1); + mExpandableListView.addFooterView(progress_bar_view); + // report an issue View report_an_issue_view = inflater.inflate(R.layout.hs_expandable_footer_report_issue, null); report_an_issue_view.findViewById(R.id.button1).setOnClickListener(reportIssueClickListener); @@ -227,14 +234,14 @@ public void onErrorResponse(VolleyError error) { public void startHomeScreenLoadingDisplay(boolean loading) { if (loading) { numberOfServerCallWaiting = 2; - getHelpStackActivity().setProgressBarIndeterminateVisibility(true); + progressBar.setVisibility(View.VISIBLE); } else { // Stop Loading numberOfServerCallWaiting--; if (numberOfServerCallWaiting == 0) { if (getHelpStackActivity() != null) { // To handle a crash that happens if activity is re-created and we receive network response after that. - getHelpStackActivity().setProgressBarIndeterminateVisibility(false); + progressBar.setVisibility(View.GONE); } } } @@ -244,12 +251,12 @@ public void startHomeScreenLoadingDisplay(boolean loading) { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { - if (groupPosition == 0) { + if (groupPosition == faq_position) { HSKBItem kbItemClicked = (HSKBItem) mAdapter.getChild(groupPosition, childPosition); articleClickedOnPosition(kbItemClicked); return true; } - if (groupPosition == 1) { + if (groupPosition == get_issues_position()) { HSTicket ticket = (HSTicket) mAdapter.getChild(groupPosition, childPosition); HSActivityManager.startIssueDetailActivity(getHelpStackActivity(), ticket); return true; @@ -283,24 +290,26 @@ public void startReportAnIssue() { private void refreshList() { mAdapter.clearAll(); - mAdapter.addParent(0, getString(R.string.hs_articles_title)); - - if (fetchedKbArticles != null) { - for (int i = 0; i < fetchedKbArticles.length ; i++) { - HSKBItem item = fetchedKbArticles[i]; - mAdapter.addChild(0, item); - } - } - if (fetchedTickets != null && fetchedTickets.length > 0) { - mAdapter.addParent(1, getString(R.string.hs_issues_title)); + if (fetchedTickets != null && fetchedTickets.length > 0) { + faq_position = 1; + mAdapter.addParent(0, getString(R.string.hs_issues_title)); for (int i = 0; i < fetchedTickets.length ; i++) { HSTicket item = fetchedTickets[i]; - mAdapter.addChild(1, item); + mAdapter.addChild(0, item); } } + mAdapter.addParent(faq_position, getString(R.string.hs_articles_title)); + + if (fetchedKbArticles != null) { + for (int i = 0; i < fetchedKbArticles.length ; i++) { + HSKBItem item = fetchedKbArticles[i]; + mAdapter.addChild(faq_position, item); + } + } + mAdapter.notifyDataSetChanged(); expandAll(); } @@ -341,13 +350,13 @@ public View getChildView(final int groupPosition,final int childPosition, boolea holder = (ChildViewHolder) convertView.getTag(); } - if (groupPosition == 0) { - HSKBItem item = (HSKBItem) getChild(groupPosition, childPosition); - holder.textView1.setText(item.getSubject()); + if (groupPosition == faq_position) { + HSKBItem item = (HSKBItem) getChild(groupPosition, childPosition); + holder.textView1.setText(item.getSubject()); } - else if (groupPosition == 1){ - HSTicket item = (HSTicket) getChild(groupPosition, childPosition); - holder.textView1.setText(item.getSubject()); + else if (groupPosition == get_issues_position()){ + HSTicket item = (HSTicket) getChild(groupPosition, childPosition); + holder.textView1.setText(item.getSubject()); } return convertView; @@ -380,4 +389,8 @@ private class ChildViewHolder { TextView textView1; } } + + private int get_issues_position() { + return 1 - faq_position; + } } diff --git a/helpstack/src/com/tenmiles/helpstack/gears/HSDeskGear.java b/helpstack/src/com/tenmiles/helpstack/gears/HSDeskGear.java index 8262222..af637c1 100644 --- a/helpstack/src/com/tenmiles/helpstack/gears/HSDeskGear.java +++ b/helpstack/src/com/tenmiles/helpstack/gears/HSDeskGear.java @@ -637,7 +637,7 @@ private class DeskJsonObjectRequest extends JsonObjectRequest { protected static final int TIMEOUT_MS = 10000; /** Default number of retries for image requests */ - protected static final int MAX_RETRIES = 0; + protected static final int MAX_RETRIES = 2; /** Default backoff multiplier for image requests */ protected static final float BACKOFF_MULT = 0f; diff --git a/helpstack/src/com/tenmiles/helpstack/gears/HSHappyfoxGear.java b/helpstack/src/com/tenmiles/helpstack/gears/HSHappyfoxGear.java index 12771b9..ccd779f 100644 --- a/helpstack/src/com/tenmiles/helpstack/gears/HSHappyfoxGear.java +++ b/helpstack/src/com/tenmiles/helpstack/gears/HSHappyfoxGear.java @@ -500,7 +500,7 @@ private class TicketFormRequest extends Request { protected static final int TIMEOUT_MS = 10000; /** Default number of retries for image requests */ - protected static final int MAX_RETRIES = 0; + protected static final int MAX_RETRIES = 2; /** Default backoff multiplier for image requests */ protected static final float BACKOFF_MULT = 1f; diff --git a/helpstack/src/com/tenmiles/helpstack/gears/HSZendeskGear.java b/helpstack/src/com/tenmiles/helpstack/gears/HSZendeskGear.java index eb0cfca..bfd2987 100644 --- a/helpstack/src/com/tenmiles/helpstack/gears/HSZendeskGear.java +++ b/helpstack/src/com/tenmiles/helpstack/gears/HSZendeskGear.java @@ -643,7 +643,7 @@ private class ZendeskJsonObjectRequest extends JsonObjectRequest { protected static final int TIMEOUT_MS = 10000; /** Default number of retries for image requests */ - protected static final int MAX_RETRIES = 0; + protected static final int MAX_RETRIES = 2; /** Default backoff multiplier for image requests */ protected static final float BACKOFF_MULT = 1f; From 2db60cd69af2a99744c50332fc9ce540d17ead43 Mon Sep 17 00:00:00 2001 From: Anirudh S Date: Thu, 3 Sep 2015 18:39:48 +0530 Subject: [PATCH 05/12] UI changes to New Issue screen --- .../res/layout/hs_fragment_new_issue.xml | 106 ++++++++---------- helpstack/res/values/hs_colors.xml | 1 + helpstack/res/values/hs_default_theme.xml | 4 +- helpstack/res/values/hs_dimens.xml | 2 +- .../helpstack/fragments/NewIssueFragment.java | 1 - 5 files changed, 48 insertions(+), 66 deletions(-) diff --git a/helpstack/res/layout/hs_fragment_new_issue.xml b/helpstack/res/layout/hs_fragment_new_issue.xml index 20545e3..cd7b145 100644 --- a/helpstack/res/layout/hs_fragment_new_issue.xml +++ b/helpstack/res/layout/hs_fragment_new_issue.xml @@ -1,82 +1,64 @@ - + tools:context="com.tenmiles.helpstack.NewIssueActivity$PlaceholderFragment" + android:orientation="vertical" + > - + android:orientation="horizontal"> - + - + + + + + android:ems="10" + android:gravity="left|top" + android:hint="@string/hs_message_hint" + android:minLines="4" + android:text=""/> - - - - - - - - + + diff --git a/helpstack/res/values/hs_colors.xml b/helpstack/res/values/hs_colors.xml index bba9824..52bdb8a 100644 --- a/helpstack/res/values/hs_colors.xml +++ b/helpstack/res/values/hs_colors.xml @@ -1,5 +1,6 @@ + #228CD1 #e1e1e1 #228CD1 #ffffff diff --git a/helpstack/res/values/hs_default_theme.xml b/helpstack/res/values/hs_default_theme.xml index 50ed8f6..3e40079 100644 --- a/helpstack/res/values/hs_default_theme.xml +++ b/helpstack/res/values/hs_default_theme.xml @@ -72,8 +72,8 @@ @drawable/hs_add_attachment_img - @drawable/hs_accept + @drawable/hs_accept_light - @drawable/hs_forward + @drawable/hs_forward_light diff --git a/helpstack/res/values/hs_dimens.xml b/helpstack/res/values/hs_dimens.xml index 3a13907..8e2a4b0 100644 --- a/helpstack/res/values/hs_dimens.xml +++ b/helpstack/res/values/hs_dimens.xml @@ -4,7 +4,7 @@ 16dp 16dp - 20sp + 14sp 0.5dip 18sp 16sp diff --git a/helpstack/src/com/tenmiles/helpstack/fragments/NewIssueFragment.java b/helpstack/src/com/tenmiles/helpstack/fragments/NewIssueFragment.java index a6685bb..ddfca5c 100644 --- a/helpstack/src/com/tenmiles/helpstack/fragments/NewIssueFragment.java +++ b/helpstack/src/com/tenmiles/helpstack/fragments/NewIssueFragment.java @@ -124,7 +124,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa if (!HSHelpStack.getInstance(getActivity()).getShowCredits()) { rootView.findViewById(R.id.footerTextLabel).setVisibility(View.GONE); - rootView.findViewById(R.id.footerDivider).setVisibility(View.GONE); } return rootView; From cc1c90cbde8efda84c5cbf5089c9723e5d442530 Mon Sep 17 00:00:00 2001 From: Anirudh S Date: Fri, 4 Sep 2015 13:41:39 +0530 Subject: [PATCH 06/12] Capitalize first letters of each sentence in EditText fields --- .../res/layout/hs_fragment_issue_detail.xml | 1 + .../res/layout/hs_fragment_new_issue.xml | 7 +- helpstack/res/layout/hs_fragment_new_user.xml | 105 +++++++----------- .../res/values/hs_default_theme_base.xml | 4 +- helpstack/res/values/hs_strings.xml | 2 +- 5 files changed, 47 insertions(+), 72 deletions(-) diff --git a/helpstack/res/layout/hs_fragment_issue_detail.xml b/helpstack/res/layout/hs_fragment_issue_detail.xml index 36d0513..5c2210c 100644 --- a/helpstack/res/layout/hs_fragment_issue_detail.xml +++ b/helpstack/res/layout/hs_fragment_issue_detail.xml @@ -33,6 +33,7 @@ + android:orientation="vertical"> @@ -34,9 +33,9 @@ android:src="@drawable/hs_attachment_icon" /> - - + android:layout_height="match_parent" + android:orientation="vertical" + xmlns:android="http://schemas.android.com/apk/res/android"> - - - - - - - - - - - + android:layout_height="wrap_content" + android:layout_marginLeft="10dp" + android:layout_marginRight="10dp" + android:layout_marginTop="20dp" + android:text="@string/hs_new_user_message" /> + + + + + + - - + - diff --git a/helpstack/res/values/hs_default_theme_base.xml b/helpstack/res/values/hs_default_theme_base.xml index 361cdd3..19b0806 100644 --- a/helpstack/res/values/hs_default_theme_base.xml +++ b/helpstack/res/values/hs_default_theme_base.xml @@ -118,9 +118,7 @@ diff --git a/helpstack/res/values/hs_strings.xml b/helpstack/res/values/hs_strings.xml index aa80ec7..d8e99f8 100644 --- a/helpstack/res/values/hs_strings.xml +++ b/helpstack/res/values/hs_strings.xml @@ -17,7 +17,7 @@ First Name Last Name Email Address - Please enter your contact details to reach you + Enter your contact details to reach you later Your issue has been created and raised From 3a929e76d1dbd5cb364ea83f9d39c1d3ca825f56 Mon Sep 17 00:00:00 2001 From: Anirudh S Date: Fri, 4 Sep 2015 13:42:37 +0530 Subject: [PATCH 07/12] Show toast message when creating issue. Fallback since Progress circle in Action Bar has been deprecated. --- helpstack/res/values/hs_strings.xml | 1 + .../helpstack/fragments/NewIssueFragment.java | 2 + .../helpstack/fragments/NewUserFragment.java | 70 ++++++++++--------- 3 files changed, 39 insertions(+), 34 deletions(-) diff --git a/helpstack/res/values/hs_strings.xml b/helpstack/res/values/hs_strings.xml index d8e99f8..7a95ec6 100644 --- a/helpstack/res/values/hs_strings.xml +++ b/helpstack/res/values/hs_strings.xml @@ -20,6 +20,7 @@ Enter your contact details to reach you later + Creating issue Your issue has been created and raised Report Issue Subject diff --git a/helpstack/src/com/tenmiles/helpstack/fragments/NewIssueFragment.java b/helpstack/src/com/tenmiles/helpstack/fragments/NewIssueFragment.java index ddfca5c..23b0d51 100644 --- a/helpstack/src/com/tenmiles/helpstack/fragments/NewIssueFragment.java +++ b/helpstack/src/com/tenmiles/helpstack/fragments/NewIssueFragment.java @@ -226,6 +226,8 @@ public void onErrorResponse(VolleyError error) { getHelpStackActivity().setSupportProgressBarIndeterminateVisibility(false); } }); + + Toast.makeText(getActivity(), getResources().getString(R.string.hs_creating_issue), Toast.LENGTH_LONG).show(); } else { HSActivityManager.startNewUserActivity(this, REQUEST_CODE_NEW_TICKET, getSubject(), formattedBody, attachmentArray); diff --git a/helpstack/src/com/tenmiles/helpstack/fragments/NewUserFragment.java b/helpstack/src/com/tenmiles/helpstack/fragments/NewUserFragment.java index 64b0b5c..7ea16fe 100644 --- a/helpstack/src/com/tenmiles/helpstack/fragments/NewUserFragment.java +++ b/helpstack/src/com/tenmiles/helpstack/fragments/NewUserFragment.java @@ -173,40 +173,42 @@ public boolean onOptionsItemSelected(MenuItem item) { getHelpStackActivity().setSupportProgressBarIndeterminateVisibility(true); - gearSource.checkForUserDetailsValidity("NEW_USER", getFirstName(), getLastName(), - getEmailAdddress(), new OnFetchedSuccessListener() { - - @Override - public void onSuccess(Object successObject) { - String formattedBody = message; - - gearSource.createNewTicket("NEW_TICKET", (HSUser)successObject, subject, formattedBody, attachmentArray, - new OnNewTicketFetchedSuccessListener() { - - @Override - public void onSuccess(HSUser udpatedUserDetail, HSTicket ticket) { - getHelpStackActivity().setSupportProgressBarIndeterminateVisibility(false); - sendSuccessSignal(ticket); - gearSource.clearTicketDraft(); - Toast.makeText(getActivity(), getResources().getString(R.string.hs_issue_created_raised), Toast.LENGTH_LONG).show(); - } - - }, new ErrorListener() { - - @Override - public void onErrorResponse(VolleyError error) { - HSUtils.showAlertDialog(getActivity(), getResources().getString(R.string.hs_error_reporting_issue), getResources().getString(R.string.hs_error_check_network_connection)); - getHelpStackActivity().setSupportProgressBarIndeterminateVisibility(false); - } - }); - } - }, new ErrorListener() { - - @Override - public void onErrorResponse(VolleyError error) { - getHelpStackActivity().setSupportProgressBarIndeterminateVisibility(false); - } - }); + gearSource.checkForUserDetailsValidity("NEW_USER", getFirstName(), getLastName(), + getEmailAdddress(), new OnFetchedSuccessListener() { + + @Override + public void onSuccess(Object successObject) { + String formattedBody = message; + + gearSource.createNewTicket("NEW_TICKET", (HSUser) successObject, subject, formattedBody, attachmentArray, + new OnNewTicketFetchedSuccessListener() { + + @Override + public void onSuccess(HSUser udpatedUserDetail, HSTicket ticket) { + getHelpStackActivity().setSupportProgressBarIndeterminateVisibility(false); + sendSuccessSignal(ticket); + gearSource.clearTicketDraft(); + Toast.makeText(getActivity(), getResources().getString(R.string.hs_issue_created_raised), Toast.LENGTH_LONG).show(); + } + + }, new ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + HSUtils.showAlertDialog(getActivity(), getResources().getString(R.string.hs_error_reporting_issue), getResources().getString(R.string.hs_error_check_network_connection)); + getHelpStackActivity().setSupportProgressBarIndeterminateVisibility(false); + } + }); + } + }, new ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + getHelpStackActivity().setSupportProgressBarIndeterminateVisibility(false); + } + }); + + Toast.makeText(getActivity(), getResources().getString(R.string.hs_creating_issue), Toast.LENGTH_LONG).show(); return true; } From 3409fe128b43ff125841d0863cfde138468071ed Mon Sep 17 00:00:00 2001 From: Anirudh S Date: Fri, 4 Sep 2015 14:35:49 +0530 Subject: [PATCH 08/12] UI changes to chat bottom bar --- helpstack/res/layout/hs_fragment_issue_detail.xml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/helpstack/res/layout/hs_fragment_issue_detail.xml b/helpstack/res/layout/hs_fragment_issue_detail.xml index 5c2210c..dc85a7b 100644 --- a/helpstack/res/layout/hs_fragment_issue_detail.xml +++ b/helpstack/res/layout/hs_fragment_issue_detail.xml @@ -26,17 +26,19 @@ Date: Fri, 4 Sep 2015 17:31:33 +0530 Subject: [PATCH 09/12] Resolve UI issues in Chat bubbles --- helpstack/res/drawable/left_chat_bubble.xml | 2 +- helpstack/res/drawable/right_chat_bubble.xml | 2 +- .../hs_expandable_child_issue_detail_staff_reply.xml | 8 ++++---- .../hs_expandable_child_issue_detail_user_reply.xml | 10 ++++------ helpstack/res/layout/hs_fragment_issue_detail.xml | 2 +- 5 files changed, 11 insertions(+), 13 deletions(-) diff --git a/helpstack/res/drawable/left_chat_bubble.xml b/helpstack/res/drawable/left_chat_bubble.xml index 28c9116..3df4ef1 100644 --- a/helpstack/res/drawable/left_chat_bubble.xml +++ b/helpstack/res/drawable/left_chat_bubble.xml @@ -2,6 +2,6 @@ - + diff --git a/helpstack/res/drawable/right_chat_bubble.xml b/helpstack/res/drawable/right_chat_bubble.xml index 4c254ce..37712c4 100644 --- a/helpstack/res/drawable/right_chat_bubble.xml +++ b/helpstack/res/drawable/right_chat_bubble.xml @@ -2,6 +2,6 @@ - + diff --git a/helpstack/res/layout/hs_expandable_child_issue_detail_staff_reply.xml b/helpstack/res/layout/hs_expandable_child_issue_detail_staff_reply.xml index dada2f4..2a7990c 100644 --- a/helpstack/res/layout/hs_expandable_child_issue_detail_staff_reply.xml +++ b/helpstack/res/layout/hs_expandable_child_issue_detail_staff_reply.xml @@ -5,18 +5,18 @@ android:layout_height="match_parent" android:paddingLeft="@dimen/hs_chatbubbleMarginWidth" android:paddingRight="@dimen/hs_chatbubbleMarginWidth" - android:paddingBottom="10dp" - android:paddingTop="10dp" > + android:paddingBottom="4dp" + android:paddingTop="4dp" > + android:text=""/> + android:paddingBottom="4dp" + android:paddingTop="4dp" > diff --git a/helpstack/res/layout/hs_fragment_issue_detail.xml b/helpstack/res/layout/hs_fragment_issue_detail.xml index dc85a7b..966ffda 100644 --- a/helpstack/res/layout/hs_fragment_issue_detail.xml +++ b/helpstack/res/layout/hs_fragment_issue_detail.xml @@ -11,8 +11,8 @@ android:layout_height="match_parent" android:groupIndicator="@null" android:layout_above="@+id/replyLayout" - android:dividerHeight="1dip" android:listSelector="#0000" + android:childDivider="@color/hs_transparent_color" android:cacheColorHint="@color/hs_transparent_color" /> Date: Fri, 4 Sep 2015 17:31:59 +0530 Subject: [PATCH 10/12] Code cleanup --- helpstack/res/values/hs_default_theme_base.xml | 6 ------ .../tenmiles/helpstack/fragments/IssueDetailFragment.java | 3 +-- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/helpstack/res/values/hs_default_theme_base.xml b/helpstack/res/values/hs_default_theme_base.xml index 19b0806..47421da 100644 --- a/helpstack/res/values/hs_default_theme_base.xml +++ b/helpstack/res/values/hs_default_theme_base.xml @@ -49,7 +49,6 @@ @dimen/hs_listView_ChildView_TextSize - @color/hs_rightchat_bubblecolor_defaultColor @@ -76,15 +75,12 @@ @drawable/left_chat_bubble_triangle - - @@ -120,7 +116,5 @@ - - diff --git a/helpstack/src/com/tenmiles/helpstack/fragments/IssueDetailFragment.java b/helpstack/src/com/tenmiles/helpstack/fragments/IssueDetailFragment.java index e7b9ab2..353783c 100644 --- a/helpstack/src/com/tenmiles/helpstack/fragments/IssueDetailFragment.java +++ b/helpstack/src/com/tenmiles/helpstack/fragments/IssueDetailFragment.java @@ -330,8 +330,7 @@ public void onSuccess(Object successObject) { selectedAttachment = null; replyEditTextView.setText(""); resetAttachmentImage(); - - + getHelpStackActivity().setProgressBarIndeterminateVisibility(false); scrollListToBottom(); From 32b26b264e19729434b9975962047c27ae5c2c0e Mon Sep 17 00:00:00 2001 From: Anirudh S Date: Fri, 4 Sep 2015 17:41:22 +0530 Subject: [PATCH 11/12] Update version to 1.2.0 --- helpstack/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpstack/build.gradle b/helpstack/build.gradle index 715add5..44b8df1 100644 --- a/helpstack/build.gradle +++ b/helpstack/build.gradle @@ -45,7 +45,7 @@ uploadArchives { repositories.mavenDeployer { pom.groupId = 'com.tenmiles' pom.artifactId = 'helpstack' - pom.version = '1.1.3' + pom.version = '1.2.0' // Add other pom properties here if you want (developer details / licenses) repository(url: "file:///Users/anirudh/Desktop/gradleRelease/") } From a022ed1edf5815f8ba19998fa1c4983218b6b78e Mon Sep 17 00:00:00 2001 From: Anirudh S Date: Mon, 7 Sep 2015 13:03:18 +0530 Subject: [PATCH 12/12] Support word-wrap in Issue message EditText --- helpstack/res/layout/hs_fragment_new_issue.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/helpstack/res/layout/hs_fragment_new_issue.xml b/helpstack/res/layout/hs_fragment_new_issue.xml index c605758..8ff5fe6 100644 --- a/helpstack/res/layout/hs_fragment_new_issue.xml +++ b/helpstack/res/layout/hs_fragment_new_issue.xml @@ -46,6 +46,8 @@ android:gravity="left|top" android:hint="@string/hs_message_hint" android:minLines="4" + android:inputType="textCapSentences|textMultiLine" + android:scrollbars="vertical" android:text=""/>