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

Have About section work with a private server. Change API test to work without Robolectric

parent 3d30be0c
No related branches found
No related tags found
No related merge requests found
Pipeline #
Showing
with 124 additions and 127 deletions
Loading
Loading
@@ -61,8 +61,6 @@ open class App : Application() {
Timber.e(error)
}
 
GitLab.init()
Prefs.init(this)
//So that we don't get weird half translations
forceLocale(Locale.ENGLISH)
Loading
Loading
@@ -98,7 +96,7 @@ open class App : Application() {
clientBuilder.addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
}
val client = clientBuilder.build()
initGitLab(account, client)
initGitLab(account, clientBuilder)
if (BuildConfig.DEBUG) {
initPicasso(OkHttpClientFactory.create(account).build())
} else {
Loading
Loading
@@ -141,8 +139,8 @@ open class App : Application() {
 
}
 
private fun initGitLab(account: Account, client: OkHttpClient) {
gitLab = GitLabFactory.createGitLab(account, client)
private fun initGitLab(account: Account, clientBuilder: OkHttpClient.Builder) {
gitLab = GitLabFactory.createGitLab(account, clientBuilder)
}
 
private fun initPicasso(client: OkHttpClient) {
Loading
Loading
Loading
Loading
@@ -20,7 +20,9 @@ import com.commit451.gimbal.Gimbal
import com.commit451.gitlab.App
import com.commit451.gitlab.BuildConfig
import com.commit451.gitlab.R
import com.commit451.gitlab.api.GitLab
import com.commit451.gitlab.extension.setup
import com.commit451.gitlab.model.Account
import com.commit451.gitlab.model.api.Contributor
import com.commit451.gitlab.navigation.Navigator
import com.commit451.gitlab.rx.CustomSingleObserver
Loading
Loading
@@ -93,7 +95,15 @@ class AboutActivity : BaseActivity() {
physicsLayout.physics.enableFling()
sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
gravitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY)
App.get().gitLab.getContributors(REPO_ID)
var gitLab = App.get().gitLab
val gitLabUrl = getString(R.string.url_gitlab)
if (!gitLab.account.serverUrl.toString().contains(gitLabUrl)) {
val account = Account()
account.serverUrl = gitLabUrl
gitLab = GitLab.Builder(account)
.build()
}
gitLab.getContributors(REPO_ID)
.setup(bindToLifecycle())
.subscribe(object : CustomSingleObserver<List<Contributor>>() {
 
Loading
Loading
Loading
Loading
@@ -2,6 +2,7 @@ package com.commit451.gitlab.activity
 
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.support.v4.view.GravityCompat
import android.support.v4.widget.DrawerLayout
Loading
Loading
@@ -48,7 +49,7 @@ class ActivityActivity : BaseActivity() {
 
var feedFragment: FeedFragment? = supportFragmentManager.findFragmentByTag(TAG_FEED_FRAGMENT) as? FeedFragment
if (feedFragment == null) {
var feedUri = App.get().getAccount().serverUrl
var feedUri = Uri.parse(App.get().getAccount().serverUrl)
 
feedUri = feedUri.buildUpon()
.appendPath("dashboard")
Loading
Loading
Loading
Loading
@@ -24,6 +24,7 @@ import com.commit451.gitlab.adapter.IssueDetailsAdapter
import com.commit451.gitlab.event.IssueChangedEvent
import com.commit451.gitlab.event.IssueReloadEvent
import com.commit451.gitlab.extension.getParcelerParcelable
import com.commit451.gitlab.extension.getUrl
import com.commit451.gitlab.extension.putParcelParcelableExtra
import com.commit451.gitlab.extension.setup
import com.commit451.gitlab.model.api.FileUploadResponse
Loading
Loading
@@ -111,7 +112,7 @@ class IssueActivity : BaseActivity() {
val onMenuItemClickListener = Toolbar.OnMenuItemClickListener { item ->
when (item.itemId) {
R.id.action_share -> {
IntentUtil.share(root, issue!!.getUrl(project))
IntentUtil.share(root, issue!!.getUrl(project!!))
return@OnMenuItemClickListener true
}
R.id.action_close -> {
Loading
Loading
Loading
Loading
@@ -117,7 +117,7 @@ class LoginActivity : BaseActivity() {
if (!verifyUrl()) {
return
}
val uri = Uri.parse(textInputLayoutUrl.editText!!.text.toString())
val uri = textInputLayoutUrl.text()
 
if (isNormalLogin) {
val valid = textInputLayoutUser.checkValid() and textInputLayoutPassword.checkValid()
Loading
Loading
@@ -241,7 +241,7 @@ class LoginActivity : BaseActivity() {
clientBuilder.addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
}
 
gitLab = GitLabFactory.createGitLab(account, clientBuilder.build())
gitLab = GitLabFactory.createGitLab(account, clientBuilder)
 
gitLab!!.login(request)
.setup(bindToLifecycle())
Loading
Loading
@@ -269,6 +269,7 @@ class LoginActivity : BaseActivity() {
}
 
fun loginWithPrivateToken() {
val serverUri = Uri.parse(account.serverUrl)
KeyChain.choosePrivateKeyAlias(this, { alias ->
account.privateKeyAlias = alias
 
Loading
Loading
@@ -288,7 +289,7 @@ class LoginActivity : BaseActivity() {
runOnUiThread { login() }
}
}
}, null, null, account.serverUrl.host, account.serverUrl.port, null)
}, null, null, serverUri.host, serverUri.port, null)
}
 
fun verifyUrl(): Boolean {
Loading
Loading
@@ -483,7 +484,7 @@ class LoginActivity : BaseActivity() {
fun isAlreadySignedIn(url: String, usernameOrEmailOrPrivateToken: String): Boolean {
val accounts = Prefs.getAccounts()
return accounts.any {
it.serverUrl == Uri.parse(url) && (usernameOrEmailOrPrivateToken == it.user.username
it.serverUrl == url && (usernameOrEmailOrPrivateToken == it.user.username
|| usernameOrEmailOrPrivateToken.equals(it.user.email, ignoreCase = true)
|| usernameOrEmailOrPrivateToken.equals(it.privateToken, ignoreCase = true))
}
Loading
Loading
Loading
Loading
@@ -5,6 +5,7 @@ import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.support.design.widget.Snackbar
import android.support.design.widget.TabLayout
Loading
Loading
@@ -88,7 +89,7 @@ class ProjectActivity : BaseActivity() {
}
R.id.action_share -> {
if (project != null) {
IntentUtil.share(root, project!!.webUrl)
IntentUtil.share(root, Uri.parse(project!!.webUrl))
}
return@OnMenuItemClickListener true
}
Loading
Loading
package com.commit451.gitlab.api
 
import android.net.Uri
import com.bluelinelabs.logansquare.LoganSquare
import com.commit451.gitlab.api.converter.UriTypeConverter
import com.commit451.gitlab.model.Account
import okhttp3.OkHttpClient
 
/**
* Provides access to all the GitLab things. Wraps RSS and the Retrofit service, in
* case we need to do overrides or global
*/
class GitLab(val client: OkHttpClient, gitLabService: GitLabService, gitLabRss: GitLabRss): GitLabService by gitLabService,
class GitLab private constructor(val account: Account, val client: OkHttpClient, gitLabService: GitLabService, gitLabRss: GitLabRss): GitLabService by gitLabService,
GitLabRss by gitLabRss {
 
companion object {
fun init() {
/**
* Register our type converters on our singleton LoganSquare get. Needs to be set here
* since we are fetching accounts immediately with LoganSquare
*/
LoganSquare.registerTypeConverter(Uri::class.java, UriTypeConverter())
class Builder(private val account: Account) {
private var clientBuilder: OkHttpClient.Builder? = null
fun clientBuilder(clientBuilder: OkHttpClient.Builder): Builder {
this.clientBuilder = clientBuilder
return this
}
}
 
fun build(): GitLab {
var clientBuilder = clientBuilder
if (clientBuilder == null) {
clientBuilder = OkHttpClient.Builder()
}
val client = clientBuilder.build()
val gitLabService = GitLabFactory.create(account, client)
val gitLab = GitLab(account, client, gitLabService, GitLabRssFactory.create(account, client))
return gitLab
}
}
}
\ No newline at end of file
package com.commit451.gitlab.api
 
import android.support.annotation.VisibleForTesting
import com.commit451.gitlab.model.Account
import com.github.aurae.retrofit2.LoganSquareConverterFactory
import okhttp3.OkHttpClient
Loading
Loading
@@ -13,10 +12,10 @@ import retrofit2.converter.scalars.ScalarsConverterFactory
*/
object GitLabFactory {
 
fun createGitLab(account: Account, client: OkHttpClient): GitLab {
val gitLabService = GitLabFactory.create(account, client)
val gitLabRss = GitLabRssFactory.create(account, client)
return GitLab(client, gitLabService, gitLabRss)
fun createGitLab(account: Account, clientBuilder: OkHttpClient.Builder): GitLab {
return GitLab.Builder(account)
.clientBuilder(clientBuilder)
.build()
}
 
/**
Loading
Loading
@@ -26,22 +25,13 @@ object GitLabFactory {
* @return the GitLabService configured client
*/
fun create(account: Account, client: OkHttpClient): GitLabService {
return create(account, client, false)
}
@VisibleForTesting
fun create(account: Account, client: OkHttpClient, dummyExecutor: Boolean): GitLabService {
val retrofitBuilder = Retrofit.Builder()
.baseUrl(account.serverUrl.toString())
.client(client)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(LoganSquareConverterFactory.create())
if (dummyExecutor) {
retrofitBuilder.callbackExecutor {
//dumb, to prevent tests from failing }
}
}
return retrofitBuilder.build().create(GitLabService::class.java)
}
}
Loading
Loading
package com.commit451.gitlab.api.converter
import android.net.Uri
import com.bluelinelabs.logansquare.typeconverters.StringBasedTypeConverter
/**
* Simple Uri type converter
*/
class UriTypeConverter : StringBasedTypeConverter<Uri>() {
override fun convertToString(`object`: Uri): String {
return `object`.toString()
}
override fun getFromString(string: String?): Uri? {
if (string != null) {
return Uri.parse(string)
} else {
return null
}
}
}
package com.commit451.gitlab.extension
 
import android.net.Uri
import com.commit451.gitlab.api.GitLabService
import com.commit451.gitlab.model.api.Build
import com.commit451.gitlab.model.api.Project
 
fun Build.getRawBuildUrl(baseUrl: Uri, project: Project): String {
return baseUrl.toString() + project.pathWithNamespace + "/builds/" + id + "/raw"
fun Build.getRawBuildUrl(baseUrl: String, project: Project): String {
return baseUrl + project.pathWithNamespace + "/builds/" + id + "/raw"
}
 
fun Build.getDownloadBuildUrl(baseUrl: Uri, project: Project): String {
return baseUrl.toString() + GitLabService.API_VERSION + "/projects/" + project.id + "/builds/" + id + "/artifacts"
fun Build.getDownloadBuildUrl(baseUrl: String, project: Project): String {
return baseUrl + GitLabService.API_VERSION + "/projects/" + project.id + "/builds/" + id + "/artifacts"
}
package com.commit451.gitlab.extension
import android.net.Uri
import com.commit451.gitlab.model.api.Issue
import com.commit451.gitlab.model.api.Project
fun Issue.getUrl(project: Project): Uri {
val projectUri = Uri.parse(project.webUrl)
return projectUri.buildUpon()
.appendPath("issues")
.appendPath(id.toString())
.build()
}
package com.commit451.gitlab.extension
import android.net.Uri
import android.support.annotation.DrawableRes
import com.commit451.gitlab.R
import com.commit451.gitlab.model.api.Project
import com.commit451.gitlab.model.api.RepositoryTreeObject
import com.commit451.gitlab.model.api.RepositoryTreeObject.*
@DrawableRes
fun RepositoryTreeObject.getDrawableForType(): Int {
if (type == null) {
return R.drawable.ic_unknown_24dp
}
when (type) {
TYPE_FILE -> return R.drawable.ic_file_24dp
TYPE_FOLDER -> return R.drawable.ic_folder_24dp
TYPE_REPO -> return R.drawable.ic_repo_24dp
}
return R.drawable.ic_unknown_24dp
}
fun RepositoryTreeObject.getUrl(project: Project, branchName: String, currentPath: String): Uri {
val projectUri = Uri.parse(project.webUrl)
return projectUri.buildUpon()
.appendPath("tree")
.appendPath(branchName)
.appendEncodedPath(currentPath)
.appendPath(name)
.build()
}
\ No newline at end of file
Loading
Loading
@@ -21,6 +21,7 @@ import com.commit451.gitlab.adapter.BreadcrumbAdapter
import com.commit451.gitlab.adapter.DividerItemDecoration
import com.commit451.gitlab.adapter.FileAdapter
import com.commit451.gitlab.event.ProjectReloadEvent
import com.commit451.gitlab.extension.getUrl
import com.commit451.gitlab.extension.setup
import com.commit451.gitlab.model.api.Project
import com.commit451.gitlab.model.api.RepositoryTreeObject
Loading
Loading
@@ -54,7 +55,7 @@ class FilesFragment : ButterKnifeFragment() {
var branchName: String? = null
var currentPath = ""
 
val mFilesAdapterListener = object : FileAdapter.Listener {
val filesAdapterListener = object : FileAdapter.Listener {
override fun onFolderClicked(treeItem: RepositoryTreeObject) {
loadData(currentPath + treeItem.name + "/")
}
Loading
Loading
@@ -68,18 +69,18 @@ class FilesFragment : ButterKnifeFragment() {
val clipboard = activity.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
 
// Creates a new text clip to put on the clipboard
val clip = ClipData.newPlainText(treeItem.name, treeItem.getUrl(project, branchName, currentPath).toString())
val clip = ClipData.newPlainText(treeItem.name, treeItem.getUrl(project!!, branchName!!, currentPath).toString())
clipboard.primaryClip = clip
Snackbar.make(root, R.string.copied_to_clipboard, Snackbar.LENGTH_SHORT)
.show()
}
 
override fun onShareClicked(treeItem: RepositoryTreeObject) {
IntentUtil.share(view!!, treeItem.getUrl(project, branchName, currentPath))
IntentUtil.share(view!!, treeItem.getUrl(project!!, branchName!!, currentPath))
}
 
override fun onOpenInBrowserClicked(treeItem: RepositoryTreeObject) {
IntentUtil.openPage(activity as BaseActivity, treeItem.getUrl(project, branchName, currentPath).toString())
IntentUtil.openPage(activity as BaseActivity, treeItem.getUrl(project!!, branchName!!, currentPath).toString())
}
}
 
Loading
Loading
@@ -92,7 +93,7 @@ class FilesFragment : ButterKnifeFragment() {
 
App.bus().register(this)
 
adapterFiles = FileAdapter(mFilesAdapterListener)
adapterFiles = FileAdapter(filesAdapterListener)
list.layoutManager = LinearLayoutManager(activity)
list.addItemDecoration(DividerItemDecoration(activity))
list.adapter = adapterFiles
Loading
Loading
package com.commit451.gitlab.model;
 
import android.net.Uri;
import android.support.annotation.NonNull;
 
import com.bluelinelabs.logansquare.annotation.JsonField;
Loading
Loading
@@ -32,7 +31,7 @@ public class Account implements Comparable<Account>{
}
 
@JsonField(name = "server_url")
Uri serverUrl;
String serverUrl;
@JsonField(name = "authorization_header")
String authorizationHeader;
@JsonField(name = "private_token")
Loading
Loading
@@ -50,11 +49,11 @@ public class Account implements Comparable<Account>{
 
public Account() {}
 
public Uri getServerUrl() {
public String getServerUrl() {
return serverUrl;
}
 
public void setServerUrl(Uri url) {
public void setServerUrl(String url) {
serverUrl = url;
}
 
Loading
Loading
package com.commit451.gitlab.model.api;
 
import android.net.Uri;
import android.support.annotation.StringDef;
 
import com.bluelinelabs.logansquare.annotation.JsonField;
Loading
Loading
@@ -112,13 +111,6 @@ public class Issue {
return author;
}
 
public Uri getUrl(Project project) {
return project.getWebUrl().buildUpon()
.appendPath("issues")
.appendPath(Long.toString(getId()))
.build();
}
public boolean isConfidential() {
return confidential;
}
Loading
Loading
Loading
Loading
@@ -33,7 +33,7 @@ public class Project {
@JsonField(name = "http_url_to_repo")
String httpUrlToRepo;
@JsonField(name = "web_url")
Uri webUrl;
String webUrl;
@JsonField(name = "owner")
UserBasic owner;
@JsonField(name = "name")
Loading
Loading
@@ -65,7 +65,7 @@ public class Project {
@JsonField(name = "forked_from_project")
ForkedFromProject forkedFromProject;
@JsonField(name = "avatar_url")
Uri avatarUrl;
String avatarUrl;
@JsonField(name = "star_count")
int starCount;
@JsonField(name = "forks_count")
Loading
Loading
@@ -111,7 +111,7 @@ public class Project {
return httpUrlToRepo;
}
 
public Uri getWebUrl() {
public String getWebUrl() {
return webUrl;
}
 
Loading
Loading
@@ -175,7 +175,7 @@ public class Project {
return forkedFromProject;
}
 
public Uri getAvatarUrl() {
public String getAvatarUrl() {
return avatarUrl;
}
 
Loading
Loading
package com.commit451.gitlab.model.api;
 
import android.net.Uri;
import android.support.annotation.StringDef;
 
import com.bluelinelabs.logansquare.annotation.JsonField;
import com.bluelinelabs.logansquare.annotation.JsonObject;
import com.commit451.gitlab.R;
 
import org.parceler.Parcel;
 
Loading
Loading
@@ -52,29 +50,4 @@ public class RepositoryTreeObject {
public String getMode() {
return mode;
}
public int getDrawableForType() {
if (type == null) {
return R.drawable.ic_unknown_24dp;
}
switch (type) {
case TYPE_FILE:
return R.drawable.ic_file_24dp;
case TYPE_FOLDER:
return R.drawable.ic_folder_24dp;
case TYPE_REPO:
return R.drawable.ic_repo_24dp;
}
return R.drawable.ic_unknown_24dp;
}
public Uri getUrl(Project project, String branchName, String currentPath) {
return project.getWebUrl().buildUpon()
.appendPath("tree")
.appendPath(branchName)
.appendEncodedPath(currentPath)
.appendPath(name)
.build();
}
}
package com.commit451.gitlab.model.api;
 
import android.net.Uri;
import com.bluelinelabs.logansquare.annotation.JsonField;
import com.bluelinelabs.logansquare.annotation.JsonObject;
 
Loading
Loading
@@ -25,7 +23,7 @@ public class User extends UserBasic {
@JsonField(name = "twitter")
String twitter;
@JsonField(name = "website_url")
Uri websiteUrl;
String websiteUrl;
 
public User() {}
 
Loading
Loading
@@ -53,7 +51,7 @@ public class User extends UserBasic {
return twitter;
}
 
public Uri getWebsiteUrl() {
public String getWebsiteUrl() {
return websiteUrl;
}
}
Loading
Loading
@@ -29,9 +29,9 @@ public class UserBasic extends UserSafe {
@State
String state;
@JsonField(name = "avatar_url")
Uri avatarUrl;
String avatarUrl;
@JsonField(name = "web_url")
Uri webUrl;
String webUrl;
 
public UserBasic() {}
 
Loading
Loading
@@ -39,15 +39,16 @@ public class UserBasic extends UserSafe {
return id;
}
 
public @State String getState() {
@State
public String getState() {
return state;
}
 
public Uri getAvatarUrl() {
public String getAvatarUrl() {
return avatarUrl;
}
 
public Uri getWebUrl() {
public String getWebUrl() {
return webUrl;
}
 
Loading
Loading
@@ -56,7 +57,7 @@ public class UserBasic extends UserSafe {
if (webUrl == null) {
return null;
}
return Uri.parse(webUrl.toString() + ".atom");
return Uri.parse(webUrl + ".atom");
}
 
@Override
Loading
Loading
Loading
Loading
@@ -221,7 +221,8 @@ object Navigator {
 
fun navigateToUrl(activity: Activity, uri: Uri, account: Account) {
Timber.d("navigateToUrl: %s", uri)
if (account.serverUrl.host == uri.host) {
val serverUri = Uri.parse(account.serverUrl)
if (serverUri.host == uri.host) {
activity.startActivity(DeepLinker.generateDeeplinkIntentFromUri(activity, uri))
} else {
IntentUtil.openPage(activity as BaseActivity, uri.toString())
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment