Skip to content

Commit

Permalink
#8 added PoC QuickSearch.jspa calling.
Browse files Browse the repository at this point in the history
Only jql like inputs are handled.
Wanted to use OkHttp library by retrofit, but there is nasty unresolved for few months bug square/okhttp#184 which doesn't work very well when some parts (e.g. analytics library in that case) doesn't use him.
Fixed bug with calling quicksearch two times when using hardware keyboard ENTER button (key down and key up).
Extracted AuthorizationHeaderGenerator because it's used also with this QuerySearch call.
  • Loading branch information
tmszdmsk committed Jul 31, 2013
1 parent e24880f commit a95dd8c
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 16 deletions.
8 changes: 0 additions & 8 deletions AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -95,14 +95,6 @@
</intent-filter>
</activity>

<!-- Filter editor -->
<activity
android:name=".filter.FilterEditorActivity_"
android:theme="@style/Theme.Sherlock.Light"
>

</activity>

<!-- Used for install referral measurement-->
<service android:name="com.google.analytics.tracking.android.CampaignTrackingService"/>
<receiver
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,19 @@

import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.googlecode.androidannotations.annotations.AfterViews;
import com.googlecode.androidannotations.annotations.Background;
import com.googlecode.androidannotations.annotations.Bean;
import com.googlecode.androidannotations.annotations.EActivity;
import com.googlecode.androidannotations.annotations.Extra;
import com.googlecode.androidannotations.annotations.FragmentById;
import com.googlecode.androidannotations.annotations.InstanceState;
import com.googlecode.androidannotations.annotations.OptionsItem;
import com.googlecode.androidannotations.annotations.UiThread;
import com.googlecode.androidannotations.annotations.ViewById;
import com.tadamski.arij.R;
import com.tadamski.arij.account.service.LoginInfo;
import com.tadamski.arij.issue.list.drawer.IssueListDrawerFragment;
import com.tadamski.arij.issue.list.drawer.QuerySearch;
import com.tadamski.arij.issue.list.filters.Filter;
import com.tadamski.arij.issue.resource.IssueService;
import com.tadamski.arij.issue.resource.model.Issue;
Expand Down Expand Up @@ -106,10 +109,23 @@ public void onIssueElementClick(Issue issue) {
public void onQuickSearch(String query) {
this.instanceFilter = null;
this.instanceQuery = query;
executeQuery(query);
doUglyQuerySearch(query);
drawerLayout.closeDrawer(drawer);
}

@Background
void doUglyQuerySearch(String query) {
QuerySearch querySearch = new QuerySearch();
String jql = querySearch.getJql(query, loginInfo);
afterUglyQuerySearch(query, jql);
}

@UiThread
void afterUglyQuerySearch(String query, String jql) {
issueListFragment.executeFilter(jql, loginInfo);
getSupportActionBar().setTitle(query);
}

private void executeQuery(String query) {
issueListFragment.executeFilter("text ~ \"" + escapeQuery(query) + "\"", loginInfo);
getSupportActionBar().setTitle(getString(R.string.quick_search_activity_title_prefix) + query);
Expand Down
42 changes: 42 additions & 0 deletions src/main/java/com/tadamski/arij/issue/list/drawer/QuerySearch.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.tadamski.arij.issue.list.drawer;

import android.net.Uri;

import com.tadamski.arij.account.service.LoginInfo;
import com.tadamski.arij.util.retrofit.AuthorizationHeaderGenerator;

import java.io.DataOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

/**
* Created by tmszdmsk on 31.07.13.
*/
public class QuerySearch {
private AuthorizationHeaderGenerator authorizationHeaderGenerator = new AuthorizationHeaderGenerator();

public String getJql(String query, LoginInfo loginInfo) {
try {
HttpURLConnection connection = (HttpURLConnection) new URL(loginInfo.getBaseURL() + "/secure/QuickSearch.jspa").openConnection();
String content = "searchString=" + URLEncoder.encode(query, "UTF-8");
connection.setRequestMethod("POST");
connection.setRequestProperty("Authorization", authorizationHeaderGenerator.getValue(loginInfo));
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setInstanceFollowRedirects(false);
connection.setDoOutput(true);
connection.setDoInput(true);
DataOutputStream out = new DataOutputStream(connection.getOutputStream());

out.writeBytes(content);
out.flush();
out.close();
String location = connection.getHeaderField("Location");
Uri uri = Uri.parse(location);
String jql = uri.getQueryParameter("jql");
return jql;
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.tadamski.arij.util.retrofit;

import android.util.Base64;

import com.tadamski.arij.account.service.LoginInfo;

/**
* Created by tmszdmsk on 31.07.13.
*/
public class AuthorizationHeaderGenerator {
public String getValue(LoginInfo credentials) {
byte[] toEncode = (credentials.getUsername() + ":" + credentials.getPassword()).getBytes();
return "Basic " + Base64.encodeToString(toEncode, Base64.NO_WRAP);
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.tadamski.arij.util.retrofit;

import android.util.Base64;

import com.tadamski.arij.account.service.LoginInfo;

import retrofit.RequestInterceptor;
Expand All @@ -12,18 +10,16 @@
public class AuthorizationInterceptor implements RequestInterceptor {

private final LoginInfo loginInfo;
private AuthorizationHeaderGenerator authorizationHeaderGenerator = new AuthorizationHeaderGenerator();

public AuthorizationInterceptor(LoginInfo loginInfo) {
this.loginInfo = loginInfo;
}

@Override
public void intercept(RequestFacade requestFacade) {
requestFacade.addHeader("Authorization", authorizationHeaderValue(loginInfo));
requestFacade.addHeader("Authorization", authorizationHeaderGenerator.getValue(loginInfo));
}

private String authorizationHeaderValue(LoginInfo credentials) {
byte[] toEncode = (credentials.getUsername() + ":" + credentials.getPassword()).getBytes();
return "Basic " + Base64.encodeToString(toEncode, Base64.NO_WRAP);
}

}

0 comments on commit a95dd8c

Please sign in to comment.